View file upload/src/addons/xenMade/ACPE/Repository/ThreadDeleter.php

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();
    }
}