File size: 2.41Kb
<?php
namespace xenMade\ACPE\Repository;
use XF\Mvc\Entity\Finder;
use XF\Mvc\Entity\Repository;
class ThreadDeleter extends Repository
{
public function findThreadsForDelete()
{
/** @var \XF\Finder\Thread $finder */
$finder = $this->finder('XF:Thread')
->where('reply_count', '=', 0)
->where('discussion_state', '=', 'visible')
->where('post_date', '<=', \XF::$time - (\XF::options()->acpe_DeleteThreadsDays * 86400) )
->order('post_date', 'ASC')
->limit(1000);
if(!empty(\XF::options()->acpe_DeleteThreadsExcludeUser) && is_array(\XF::options()->acpe_DeleteThreadsExcludeUser))
{
$finder->whereSql('user_id NOT IN (' . $this->db()->quote(\XF::options()->acpe_DeleteThreadsExcludeUser) . ')');
}
if(!empty(\XF::options()->acpe_DeleteThreadsNodes) && is_array(\XF::options()->acpe_DeleteThreadsNodes))
{
$finder->where('node_id', \XF::options()->acpe_DeleteThreadsNodes);
}
$threads = $finder->fetch();
//$db = $this->db();
//$db->beginTransaction();
/** @var \XF\Entity\Thread $thread */
foreach ($threads AS $thread)
{
// Sicher ist sicher um Fehler auszuschließen
$postCount = $this->db()->fetchOne('
SELECT COUNT(*)
FROM xf_post
WHERE thread_id = ? AND NOT post_id = ? ', [$thread->thread_id, $thread->first_post_id]);
if(!$postCount)
{
if(\XF::options()->acpe_DeleteThreads == 'soft')
{
if ($thread->discussion_state != 'deleted')
{
$thread->discussion_state = 'deleted';
/** @var \XF\Entity\DeletionLog $deletionLog */
$deletionLog = $thread->getRelationOrDefault('DeletionLog');
$deletionLog->delete_reason = \XF::phrase('acpe_thread_older_than_x_days', ['days' => \XF::options()->acpe_DeleteThreadsDays]);
$thread->save(false);
}
}
elseif(\XF::options()->acpe_DeleteThreads == 'hard')
{
$thread->delete(false);
}
}
}
//$db->commit();
}
}