Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Finder/SessionActivity.php
<?php

namespace XF\Finder;

use
XF\Mvc\Entity\Finder;

class
SessionActivity extends Finder
{
    public function
restrictType($type, $applyVisibilityRestriction = true)
    {
        switch (
$type)
        {
            case
'':
               
// no fetch limits
               
if ($applyVisibilityRestriction)
                {
                   
$this->applyMemberVisibilityRestriction();
                }
                break;

            case
'member':
               
$this->where('user_id', '>', 0)->exists('User');
                if (
$applyVisibilityRestriction)
                {
                   
$this->applyMemberVisibilityRestriction();
                }
                break;

            case
'guest':
               
$this->where([
                   
'user_id' => 0,
                   
'robot_key' => ''
               
]);
                break;

            case
'robot':
               
$this->where('user_id', 0)
                    ->
where('robot_key', '<>', '');
                break;

            default:
                throw new \
InvalidArgumentException("Unknown session activity type '$type'");
        }

        return
$this;
    }

    public function
applyMemberVisibilityRestriction()
    {
       
$visitor = \XF::visitor();

        if (!
$visitor->canBypassUserPrivacy())
        {
           
$constraints = [
                [
'user_id' => 0],
                [
'User.visible' => 1, 'User.user_state' => 'valid']
            ];

            if (
$visitor->user_id)
            {
               
$constraints[] = ['user_id' => $visitor->user_id];
            }

           
$this->whereOr($constraints);
        }

        return
$this;
    }

    public function
activeOnly()
    {
       
$cutOff = \XF::$time - $this->app()->options()->onlineStatusTimeout * 60;
       
$this->where('view_date', '>=', $cutOff);

        return
$this;
    }

    public function
withFullUser()
    {
       
$this->with(['User', 'User.Option', 'User.Profile']);

        return
$this;
    }
}