Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/EmailBounce.php
<?php

namespace XF\Repository;

use
XF\Mvc\Entity\Finder;
use
XF\Mvc\Entity\Repository;

use function
intval;

class
EmailBounce extends Repository
{
   
/**
     * @return Finder
     */
   
public function findEmailBounceLogsForList()
    {
        return
$this->finder('XF:EmailBounceLog')
            ->
with('User')
            ->
setDefaultOrder('log_date', 'DESC');
    }

    public function
insertSoftBounceLogEntry($userId, $bounceDate)
    {
       
$this->db()->insert('xf_email_bounce_soft', [
           
'user_id' => $userId,
           
'bounce_date' => gmdate('Y-m-d', $bounceDate),
           
'bounce_total' => 1
       
], false, 'bounce_total = bounce_total + 1');
    }

    public function
countRecentSoftBounces($userId, $numberOfDays)
    {
       
$cutOffTimestamp = \XF::$time - intval($numberOfDays) * 86400;
       
$cutOff = gmdate('Y-m-d', $cutOffTimestamp);

       
$result = $this->db()->fetchRow("
            SELECT COUNT(DISTINCT bounce_date) AS unique_days,
                DATEDIFF(MAX(bounce_date), MIN(bounce_date)) AS days_between,
                SUM(bounce_total) AS bounce_total
            FROM xf_email_bounce_soft
            WHERE user_id = ?
                AND bounce_date > ?
        "
, [$userId, $cutOff]);

        if (!
$result || !$result['unique_days'])
        {
            return [
               
'unique_days' => 0,
               
'days_between' => 0,
               
'bounce_total' => 0
           
];
        }
        else
        {
            return
$result;
        }
    }

    public function
pruneEmailBounceLogs($cutOff = null)
    {
        if (
$cutOff === null)
        {
           
$cutOff = \XF::$time - 86400 * 30;
        }

        return
$this->db()->delete('xf_email_bounce_log', 'log_date < ?', $cutOff);
    }

    public function
pruneSoftBounceHistory($cutOff = null)
    {
        if (
$cutOff === null)
        {
           
$cutOff = \XF::$time - 86400 * 30;
        }

       
$date = new \DateTime("@$cutOff", new \DateTimeZone('UTC'));

        return
$this->db()->delete('xf_email_bounce_soft', 'bounce_date < ?', $date->format('Y-m-d'));
    }
}