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

namespace XF\Repository;

use
XF\Mvc\Entity\Repository;

class
Report extends Repository
{
    protected
$handlerCache = [];

   
/**
     * @param array $state
     *
     * @return \XF\Finder\Report
     */
   
public function findReports($state = ['open', 'assigned'], $timeFrame = null)
    {
       
$finder = $this->finder('XF:Report')
            ->
with('User');

       
$finder->inTimeFrame($timeFrame)
            ->
order('last_modified_date', 'desc');

        if (
$state)
        {
           
$finder->where('report_state', $state);
        }

        return
$finder;
    }

   
/**
     * @param $type
     * @param bool $throw
     *
     * @return \XF\Report\AbstractHandler|null
     */
   
public function getReportHandler($type, $throw = false)
    {
        if (isset(
$this->handlerCache[$type]))
        {
            return
$this->handlerCache[$type];
        }

       
$handlerClass = \XF::app()->getContentTypeFieldValue($type, 'report_handler_class');
        if (!
$handlerClass)
        {
            if (
$throw)
            {
                throw new \
InvalidArgumentException("No report handler for '$type'");
            }
            return
null;
        }

        if (!
class_exists($handlerClass))
        {
            if (
$throw)
            {
                throw new \
InvalidArgumentException("Report handler for '$type' does not exist: $handlerClass");
            }
            return
null;
        }

       
$handlerClass = \XF::extendClass($handlerClass);
       
$handler = new $handlerClass($type);

       
$this->handlerCache[$type] = $handler;

        return
$handler;
    }

    public function
getModeratorsWhoCanHandleReport(\XF\Entity\Report $report)
    {
       
/** @var \XF\Repository\Moderator $moderatorRepo */
       
$moderatorRepo = $this->repository('XF:Moderator');

       
$moderators = $moderatorRepo->findModeratorsForList()->with('User.PermissionCombination')->fetch();

        if (
$moderators->count())
        {
            foreach (
$moderators AS $id => $moderator)
            {
               
$canView = \XF::asVisitor($moderator->User,
                    function() use (
$report) { return $report->canView(); }
                );
                if (!
$canView)
                {
                    unset(
$moderators[$id]);
                }
            }
        }

        return
$moderators;
    }

   
/**
     * @deprecated just call ArrayCollection::filterViewable directly.
     *
     * @param \XF\Mvc\Entity\ArrayCollection|\XF\Entity\Report[] $reports
     * @return \XF\Mvc\Entity\ArrayCollection|\XF\Entity\Report[]
     */
   
public function filterViewableReports($reports)
    {
        return
$reports->filterViewable();
    }

    public function
rebuildReportCounts()
    {
       
$cache = [
           
'total' => $this->db()->fetchOne("SELECT COUNT(*) FROM xf_report WHERE report_state IN('open', 'assigned')"),
           
'lastModified' => time()
        ];

        \
XF::registry()->set('reportCounts', $cache);
        return
$cache;
    }
}