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

namespace XF\Repository;

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

class
LinkProxy extends Repository
{
   
/**
     * @return Finder
     */
   
public function findLinkProxyLogsForList()
    {
        return
$this->finder('XF:LinkProxy')->setDefaultOrder('last_request_date', 'DESC');
    }

   
/**
     * @param string $url
     *
     * @return null|\XF\Entity\LinkProxy
     */
   
public function getLinkByUrl($url)
    {
       
$hash = md5($url);

        return
$this->finder('XF:LinkProxy')->where('url_hash', $hash)->fetchOne();
    }

   
/**
     * @param string $url
     *
     * @return null|\XF\Entity\LinkProxy
     */
   
public function logLinkVisit($url)
    {
        if (!
$url || !preg_match('#^https?://#i', $url))
        {
            throw new \
InvalidArgumentException('Invalid URL');
        }

       
$affected = $this->db()->insert('xf_link_proxy', [
           
'url' => $url,
           
'url_hash' => md5($url),
           
'first_request_date' => \XF::$time,
           
'last_request_date' => \XF::$time,
           
'hits' => 1
       
], false, 'last_request_date = VALUES(last_request_date), hits = hits + 1');
        if (
$affected == 1)
        {
           
$id = $this->db()->lastInsertId();
            return
$this->em->find('XF:LinkProxy', $id);
        }
        else
        {
            return
$this->getLinkByUrl($url);
        }
    }

    public function
logLinkReferrer(\XF\Entity\LinkProxy $link, $referrer)
    {
        if (!
preg_match('#^https?://#i', $referrer))
        {
            return
false;
        }

       
$this->db()->insert('xf_link_proxy_referrer', [
           
'link_id' => $link->link_id,
           
'referrer_hash' => md5($referrer),
           
'referrer_url' => $referrer,
           
'hits' => 1,
           
'first_date' => \XF::$time,
           
'last_date' => \XF::$time
       
], false, 'hits = hits + 1, last_date = VALUES(last_date)');

        return
true;
    }

   
/**
     * Prunes unused link proxy log entries.
     *
     * @param null|int $pruneDate
     *
     * @return int
     */
   
public function pruneLinkProxyLogs($pruneDate = null)
    {
        if (
$pruneDate === null)
        {
           
$options = $this->options();

            if (!
$options->imageLinkProxyLogLength)
            {
                return
0;
            }

           
$pruneDate = \XF::$time - (86400 * $options->imageLinkProxyLogLength);
        }

        return
$this->db()->delete('xf_link_proxy', 'last_request_date < ?', $pruneDate);
    }

    public function
pruneLinkReferrerLogs($pruneDate = null)
    {
        if (
$pruneDate === null)
        {
           
$options = $this->options();

            if (empty(
$options->imageLinkProxyReferrer['length']))
            {
               
// we're keeping referrer data forever
               
return 0;
            }

           
$pruneDate = \XF::$time - (86400 * $options->imageLinkProxyReferrer['length']);
        }

        return
$this->db()->delete('xf_link_proxy_referrer',
           
'last_date < ?', $pruneDate
       
);
    }
}