.
*/
declare(strict_types=1);
namespace Fisharebest\Webtrees\Statistics\Repository;
use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Contracts\UserInterface;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Individual;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface;
use Fisharebest\Webtrees\Tree;
use function count;
/**
* A repository providing methods for user related statistics.
*/
class UserRepository implements UserRepositoryInterface
{
/**
* @var Tree
*/
private $tree;
/**
* @var UserService
*/
private $user_service;
/**
* Constructor.
*
* @param Tree $tree
* @param UserService $user_service
*/
public function __construct(Tree $tree, UserService $user_service)
{
$this->tree = $tree;
$this->user_service = $user_service;
}
/**
* Who is currently logged in?
*
* @param string $type "list" or "nolist"
*
* @return string
*/
private function usersLoggedInQuery($type = 'nolist'): string
{
$content = '';
$anonymous = 0;
$logged_in = [];
foreach ($this->user_service->allLoggedIn() as $user) {
if (Auth::isAdmin() || $user->getPreference('visibleonline')) {
$logged_in[] = $user;
} else {
$anonymous++;
}
}
$count_logged_in = count($logged_in);
if ($count_logged_in === 0 && $anonymous === 0) {
$content .= I18N::translate('No signed-in and no anonymous users');
}
if ($anonymous > 0) {
$content .= '' . I18N::plural('%s anonymous signed-in user', '%s anonymous signed-in users', $anonymous, I18N::number($anonymous)) . '';
}
if ($count_logged_in > 0) {
if ($anonymous) {
if ($type === 'list') {
$content .= '
';
} else {
$content .= ' ' . I18N::translate('and') . ' ';
}
}
$content .= '' . I18N::plural('%s signed-in user', '%s signed-in users', $count_logged_in, I18N::number($count_logged_in)) . '';
if ($type === 'list') {
$content .= '