Browse Source

[Administration] En ligne : clients en ligne et actualisation automatique

feature/souke
Guillaume Bourgeois 9 months ago
parent
commit
9180d3a716
16 changed files with 330 additions and 121 deletions
  1. +79
    -0
      backend/controllers/OnlineAdminController.php
  2. +0
    -9
      backend/controllers/ProducerAdminController.php
  3. +1
    -1
      backend/controllers/UserController.php
  4. +29
    -7
      backend/views/layouts/left.php
  5. +3
    -0
      backend/views/layouts/main.php
  6. +132
    -0
      backend/views/online-admin/index.php
  7. +0
    -85
      backend/views/producer-admin/online.php
  8. +16
    -4
      backend/web/css/screen.css
  9. +24
    -0
      backend/web/sass/online-admin/_index.scss
  10. +0
    -12
      backend/web/sass/producer-admin/_online.scss
  11. +1
    -1
      backend/web/sass/screen.scss
  12. +6
    -0
      common/components/View.php
  13. +12
    -0
      common/logic/Ticket/Ticket/Repository/TicketRepository.php
  14. +7
    -0
      common/logic/Ticket/Ticket/Repository/TicketRepositoryQuery.php
  15. +15
    -2
      common/logic/User/User/Repository/UserRepository.php
  16. +5
    -0
      common/logic/User/User/Repository/UserRepositoryQuery.php

+ 79
- 0
backend/controllers/OnlineAdminController.php View File

<?php

/**
* Copyright distrib (2018)
*
* contact@opendistrib.net
*
* Ce logiciel est un programme informatique servant à aider les producteurs
* à distribuer leur production en circuits courts.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
* sur le site "http://www.cecill.info".
*
* En contrepartie de l'accessibilité au code source et des droits de copie,
* de modification et de redistribution accordés par cette licence, il n'est
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
* seule une responsabilité restreinte pèse sur l'auteur du programme, le
* titulaire des droits patrimoniaux et les concédants successifs.
*
* A cet égard l'attention de l'utilisateur est attirée sur les risques
* associés au chargement, à l'utilisation, à la modification et/ou au
* développement et à la reproduction du logiciel par l'utilisateur étant
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à
* manipuler et qui le réserve donc à des développeurs et des professionnels
* avertis possédant des connaissances informatiques approfondies. Les
* utilisateurs sont donc invités à charger et tester l'adéquation du
* logiciel à leurs besoins dans des conditions permettant d'assurer la
* sécurité de leurs systèmes et ou de leurs données et, plus généralement,
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
*
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
* pris connaissance de la licence CeCILL, et que vous en avez accepté les
* termes.
*/

namespace backend\controllers;

use yii\filters\VerbFilter;
use yii\filters\AccessControl;

class OnlineAdminController extends BackendController
{
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::class,
],
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],
'matchCallback' => function ($rule, $action) {
return $this->getUserModule()
->getAuthorizationChecker()
->isGrantedAsAdministrator($this->getUserCurrent());
}
]
],
],
];
}

public function actionIndex()
{
$usersWithStatusProducerOnlineArray = $this->getUserModule()->getRepository()->findUsersWithStatusProducerAndOnline();
$usersWithStatusUserOnlineArray = $this->getUserModule()->getRepository()->findUsersWithStatusUserAndOnline();

return $this->render('index', [
'usersWithStatusProducerOnlineArray' => $usersWithStatusProducerOnlineArray,
'usersWithStatusUserOnlineArray' => $usersWithStatusUserOnlineArray,
]);
}
}

+ 0
- 9
backend/controllers/ProducerAdminController.php View File

]; ];
} }


public function actionOnline()
{
$usersWithStatusProducerOnlineArray = $this->getUserModule()->getRepository()->findUsersStatusProducerOnline();

return $this->render('@backend/views/producer-admin/online', [
'usersWithStatusProducerOnlineArray' => $usersWithStatusProducerOnlineArray,
]);
}

/** /**
* Liste les producteurs. * Liste les producteurs.
* *

+ 1
- 1
backend/controllers/UserController.php View File

$duration = 0; $duration = 0;
Yii::$app->user->switchIdentity($user, $duration); Yii::$app->user->switchIdentity($user, $duration);
Yii::$app->session->set('user.idbeforeswitch', $initialId); Yii::$app->session->set('user.idbeforeswitch', $initialId);
return $this->redirect(['index']);
return $this->redirect($this->getUrlManagerFrontend()->createUrl(['site/index']));
} }
} else { } else {
throw new NotFoundHttpException('Page introuvable'); throw new NotFoundHttpException('Page introuvable');

+ 29
- 7
backend/views/layouts/left.php View File

$developerOnlineLabel = '<small class="label pull-right bg-green"><i class="fa fa-phone"></i></small>'; $developerOnlineLabel = '<small class="label pull-right bg-green"><i class="fa fa-phone"></i></small>';
} }


$countTicketsAdminUnreadLabel = '';
$countTicketsAdminUnread = $ticketModule->countTicketsAdminUnreadByUser($this->getUserCurrent());
$countTicketsLabel = '';
$countTicketsAdminUnread = $ticketModule->getRepository()->countTicketsAdminUnreadByUser($this->getUserCurrent());
if($countTicketsAdminUnread && $isUserCurrentGrantedAsAdministrator) { if($countTicketsAdminUnread && $isUserCurrentGrantedAsAdministrator) {
$countTicketsAdminUnreadLabel = '<span class="pull-right-container"><small class="label pull-right bg-green">'.$countTicketsAdminUnread.'</small></span>';
$countTicketsLabel = '<span class="pull-right-container"><small class="label pull-right bg-green">'.$countTicketsAdminUnread.'</small></span>';
}
else {
$countTicketsAdminOpen = $ticketModule->getRepository()->countTicketsAdminStatusOpen();
$countTicketsLabel = '<span class="pull-right-container"><small class="label pull-right bg-blue">'.$countTicketsAdminOpen.'</small></span>';
} }


$sumUserProducerCredits = $userProducerModule->sumUserProducerCredits(); $sumUserProducerCredits = $userProducerModule->sumUserProducerCredits();
$countUsersWithStatusProducerOnline = $userModule->getRepository()->countUsersStatusProducerOnline(); $countUsersWithStatusProducerOnline = $userModule->getRepository()->countUsersStatusProducerOnline();
$countUsersWithStatusProducerOnlineLabel = ''; $countUsersWithStatusProducerOnlineLabel = '';
if($countUsersWithStatusProducerOnline) { if($countUsersWithStatusProducerOnline) {
$countUsersWithStatusProducerOnlineLabel = '<span class="pull-right-container"><small class="label pull-right bg-blue">'.$countUsersWithStatusProducerOnline.'</small></span>';
$countUsersWithStatusProducerOnlineLabel = '<small class="label pull-right bg-red">'.$countUsersWithStatusProducerOnline.'</small>';
}

$countUsersWithStatusUserOnline = $userModule->getRepository()->countUsersStatusUserOnline();
$countUsersWithStatusUserOnlineLabel = '';
if($countUsersWithStatusUserOnline) {
$countUsersWithStatusUserOnlineLabel = '<small class="label pull-right bg-blue">'.$countUsersWithStatusUserOnline.'</small>';
}

$countUsersOnlineLabel = '';
if($countUsersWithStatusProducerOnline || $countUsersWithStatusUserOnline) {
$countUsersOnlineLabel = '<span class="pull-right-container">';
if($countUsersWithStatusUserOnline) {
$countUsersOnlineLabel .= $countUsersWithStatusUserOnlineLabel;
}
if($countUsersWithStatusProducerOnline) {
$countUsersOnlineLabel .= $countUsersWithStatusProducerOnlineLabel;
}
$countUsersOnlineLabel .= '</span>';
} }


?> ?>
[ [
'label' => 'En ligne', 'label' => 'En ligne',
'icon' => 'wifi', 'icon' => 'wifi',
'url' => ['producer-admin/online'],
'url' => ['online-admin/index'],
'visible' => $isUserCurrentGrantedAsAdministrator, 'visible' => $isUserCurrentGrantedAsAdministrator,
'template' => '<a href="{url}">{icon} {label}' . $countUsersWithStatusProducerOnlineLabel . '</a>'
'template' => '<a href="{url}">{icon} {label}' . $countUsersOnlineLabel . '</a>'
], ],
[ [
'label' => 'Support', 'label' => 'Support',
'icon' => 'comments', 'icon' => 'comments',
'url' => ['support-admin/index'], 'url' => ['support-admin/index'],
'visible' => $isUserCurrentGrantedAsAdministrator, 'visible' => $isUserCurrentGrantedAsAdministrator,
'template' => '<a href="{url}">{icon} {label}' . $countTicketsAdminUnreadLabel . '</a>'
'template' => '<a href="{url}">{icon} {label}' . $countTicketsLabel . '</a>'
], ],
['label' => 'Producteurs', 'icon' => 'th-list', 'url' => ['/producer-admin/index'], 'visible' => $isUserCurrentGrantedAsAdministrator], ['label' => 'Producteurs', 'icon' => 'th-list', 'url' => ['/producer-admin/index'], 'visible' => $isUserCurrentGrantedAsAdministrator],
[ [

+ 3
- 0
backend/views/layouts/main.php View File

<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="baseurl" content="<?= Yii::$app->urlManagerBackend->baseUrl ; ?>"> <meta name="baseurl" content="<?= Yii::$app->urlManagerBackend->baseUrl ; ?>">
<meta name="baseurl-absolute" content="<?= Yii::$app->urlManagerBackend->getHostInfo().Yii::$app->urlManagerBackend->baseUrl; ?>"> <meta name="baseurl-absolute" content="<?= Yii::$app->urlManagerBackend->getHostInfo().Yii::$app->urlManagerBackend->baseUrl; ?>">
<?php if($this->metaRefresh): ?>
<meta http-equiv="refresh" content="60">
<?php endif; ?>
<?= Html::csrfMetaTags() ?> <?= Html::csrfMetaTags() ?>
<title><?= Html::encode($this->page_title) ?> | Opendistrib</title> <title><?= Html::encode($this->page_title) ?> | Opendistrib</title>
<link rel="icon" type="image/png" href="<?php echo Yii::$app->urlManagerBackend->getBaseUrl(); ?>/img/favicon-distrib.png" /> <link rel="icon" type="image/png" href="<?php echo Yii::$app->urlManagerBackend->getBaseUrl(); ?>/img/favicon-distrib.png" />

+ 132
- 0
backend/views/online-admin/index.php View File

<?php

/**
* Copyright distrib (2018)
*
* contact@opendistrib.net
*
* Ce logiciel est un programme informatique servant à aider les producteurs
* à distribuer leur production en circuits courts.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
* sur le site "http://www.cecill.info".
*
* En contrepartie de l'accessibilité au code source et des droits de copie,
* de modification et de redistribution accordés par cette licence, il n'est
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
* seule une responsabilité restreinte pèse sur l'auteur du programme, le
* titulaire des droits patrimoniaux et les concédants successifs.
*
* A cet égard l'attention de l'utilisateur est attirée sur les risques
* associés au chargement, à l'utilisation, à la modification et/ou au
* développement et à la reproduction du logiciel par l'utilisateur étant
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à
* manipuler et qui le réserve donc à des développeurs et des professionnels
* avertis possédant des connaissances informatiques approfondies. Les
* utilisateurs sont donc invités à charger et tester l'adéquation du
* logiciel à leurs besoins dans des conditions permettant d'assurer la
* sécurité de leurs systèmes et ou de leurs données et, plus généralement,
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
*
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
* pris connaissance de la licence CeCILL, et que vous en avez accepté les
* termes.
*/

use common\helpers\Image;
use yii\helpers\Html;
use yii\grid\GridView;
use common\logic\User\User\Model\User;
use common\logic\Producer\Producer\Model\Producer;
use common\helpers\Price;

$producerModule = $this->getProducerModule();
$userModule = $this->getUserModule();
$this->setTitle('En ligne');
$this->addBreadcrumb($this->getTitle());
$this->setMetaRefresh(true);

?>
<div class="online-index">

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<div class="glyphicon glyphicon-grain"></div>
Producteurs (<?= count($usersWithStatusProducerOnlineArray); ?>)
</h3>
</div>
<div class="panel-body">
<?php if($usersWithStatusProducerOnlineArray && count($usersWithStatusProducerOnlineArray) > 0): ?>
<?php foreach ($usersWithStatusProducerOnlineArray as $userWithStatusProducerOnline): ?>
<?php $producer = $userWithStatusProducerOnline->producer; ?>
<?php if($producer): ?>
<div class="col-md-3">
<div class="box box-primary box-producer">
<div class="box-body box-profile">
<?php if ($producer->logo && Image::isPhotoExist($producer->logo)): ?>
<img class="profile-user-img img-responsive img-circle"
src="<?= Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl; ?>/uploads/<?= $producer->logo; ?>"
alt="Logo <?= Html::encode($producer->name) ?>">
<?php endif; ?>

<h3 class="profile-username text-center">
<a title="Aller sur le compte de ce producteur" href="<?= $this->getUrlManagerBackend()->createUrl(['site/switch-producer', 'id' => $producer->id]); ?>">
<?= $producer->name; ?>
</a>
</h3>
<p class="text-muted text-center">
<?= $userModule->getSolver()->getUsername($userWithStatusProducerOnline); ?><br/>
</p>
</div>
</div>
</div>
<?php endif; ?>
<?php endforeach; ?>
<div class="clr"></div>
<?php else: ?>
<div class="alert alert-info">Aucun producteur en ligne actuellement.</div>
<?php endif; ?>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<span class="glyphicon glyphicon-user"></span>
Utilisateurs (<?= count($usersWithStatusUserOnlineArray); ?>)
</h3>
</div>
<div class="panel-body">
<?php if($usersWithStatusUserOnlineArray && count($usersWithStatusUserOnlineArray) > 0): ?>
<?php foreach ($usersWithStatusUserOnlineArray as $userWithStatusUserOnline): ?>
<div class="col-md-3">
<div class="box box-primary box-user">
<div class="box-body box-profile">
<h3 class="profile-username text-center">
<a title="Prendre la main" href="<?= $this->getUrlManagerBackend()->createUrl(['user/switch-identity', 'id' => $userWithStatusUserOnline->id]); ?>">
<?= $userModule->getSolver()->getUsername($userWithStatusUserOnline); ?>
</a>
</h3>
<p class="text-muted text-center">
<?php $userProducerArray = $userWithStatusUserOnline->userProducer; ?>
<?php foreach($userProducerArray as $userProducer): ?>
<?php if($userProducer->active && $userProducer->bookmark): ?>
<span class="label label-default"><?= $userProducer->producer->name; ?></span>
<?php endif; ?>
<?php endforeach; ?>
</p>
</div>
</div>
</div>
<?php endforeach; ?>
<div class="clr"></div>
<?php else: ?>
<div class="alert alert-info">Aucun utilisateur en ligne actuellement.</div>
<?php endif; ?>
</div>
</div>
</div>

+ 0
- 85
backend/views/producer-admin/online.php View File

<?php

/**
* Copyright distrib (2018)
*
* contact@opendistrib.net
*
* Ce logiciel est un programme informatique servant à aider les producteurs
* à distribuer leur production en circuits courts.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
* sur le site "http://www.cecill.info".
*
* En contrepartie de l'accessibilité au code source et des droits de copie,
* de modification et de redistribution accordés par cette licence, il n'est
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
* seule une responsabilité restreinte pèse sur l'auteur du programme, le
* titulaire des droits patrimoniaux et les concédants successifs.
*
* A cet égard l'attention de l'utilisateur est attirée sur les risques
* associés au chargement, à l'utilisation, à la modification et/ou au
* développement et à la reproduction du logiciel par l'utilisateur étant
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à
* manipuler et qui le réserve donc à des développeurs et des professionnels
* avertis possédant des connaissances informatiques approfondies. Les
* utilisateurs sont donc invités à charger et tester l'adéquation du
* logiciel à leurs besoins dans des conditions permettant d'assurer la
* sécurité de leurs systèmes et ou de leurs données et, plus généralement,
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
*
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
* pris connaissance de la licence CeCILL, et que vous en avez accepté les
* termes.
*/

use common\helpers\Image;
use yii\helpers\Html;
use yii\grid\GridView;
use common\logic\User\User\Model\User;
use common\logic\Producer\Producer\Model\Producer;
use common\helpers\Price;

$producerModule = $this->getProducerModule();
$userModule = $this->getUserModule();
$this->setTitle('Producteurs en ligne');
$this->addBreadcrumb($this->getTitle());

?>
<div class="producer-admin-online">
<?php if($usersWithStatusProducerOnlineArray && count($usersWithStatusProducerOnlineArray) > 0): ?>
<?php foreach ($usersWithStatusProducerOnlineArray as $userWithStatusProducerOnline): ?>
<?php $producer = $userWithStatusProducerOnline->producer; ?>
<div class="col-md-3">
<div class="box box-primary">
<div class="box-body box-profile">
<?php if ($producer->logo && Image::isPhotoExist($producer->logo)): ?>
<img class="profile-user-img img-responsive img-circle"
src="<?= Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl; ?>/uploads/<?= $producer->logo; ?>"
alt="Logo <?= Html::encode($producer->name) ?>">
<?php endif; ?>

<h3 class="profile-username text-center">
<?= $producer->name; ?>
</h3>
<p class="text-muted text-center">
<?= $userModule->getSolver()->getUsername($userWithStatusProducerOnline); ?><br/>
</p>
<!--<ul class="list-group list-group-unbordered">
<li class="list-group-item">
<b>Téléphone</b> <a class="pull-right">06 00 00 00 00</a>
</li>
</ul>
<a href="#" class="btn btn-primary btn-block"><b>Bouton</b></a>-->
</div>
</div>
</div>
<?php endforeach; ?>
<div class="clr"></div>
<?php else: ?>
<div class="alert alert-info">Aucun producteur en ligne actuellement.</div>
<?php endif; ?>
</div>

+ 16
- 4
backend/web/css/screen.css View File

margin-top: 5px; margin-top: 5px;
} }


/* line 3, ../sass/producer-admin/_online.scss */
.producer-admin-online .box {
/* line 3, ../sass/online-admin/_index.scss */
.online-index .box {
overflow: hidden;
}
/* line 6, ../sass/online-admin/_index.scss */
.online-index .box.box-user {
height: 150px;
}
/* line 10, ../sass/online-admin/_index.scss */
.online-index .box.box-producer {
height: 250px; height: 250px;
} }
/* line 6, ../sass/producer-admin/_online.scss */
.producer-admin-online .box .profile-username {
/* line 14, ../sass/online-admin/_index.scss */
.online-index .box .profile-username {
font-family: 'Source Sans Pro',sans-serif; font-family: 'Source Sans Pro',sans-serif;
font-weight: normal; font-weight: normal;
font-size: 18px; font-size: 18px;
} }
/* line 19, ../sass/online-admin/_index.scss */
.online-index .box .profile-username a {
color: #333;
}


/* line 4, ../sass/feature-admin/_index.scss */ /* line 4, ../sass/feature-admin/_index.scss */
.feature-admin-index table th.only-for-selected-producers, .feature-admin-index table th.only-for-selected-producers,

+ 24
- 0
backend/web/sass/online-admin/_index.scss View File


.online-index {
.box {
overflow: hidden;

&.box-user {
height: 150px;
}

&.box-producer {
height: 250px;
}

.profile-username {
font-family: 'Source Sans Pro',sans-serif;
font-weight: normal;
font-size: 18px;

a {
color: #333;
}
}
}
}

+ 0
- 12
backend/web/sass/producer-admin/_online.scss View File


.producer-admin-online {
.box {
height: 250px;

.profile-username {
font-family: 'Source Sans Pro',sans-serif;
font-weight: normal;
font-size: 18px;
}
}
}

+ 1
- 1
backend/web/sass/screen.scss View File

@import "support/_index.scss"; @import "support/_index.scss";
@import "support/_view.scss"; @import "support/_view.scss";
@import "producer-admin/_index.scss"; @import "producer-admin/_index.scss";
@import "producer-admin/_online.scss";
@import "online-admin/_index.scss";
@import "feature-admin/_index.scss"; @import "feature-admin/_index.scss";
@import "setting/_form.scss"; @import "setting/_form.scss";
@import "_responsive.scss" ; @import "_responsive.scss" ;

+ 6
- 0
common/components/View.php View File

var $icon; var $icon;
var $page_title ; var $page_title ;
var $buttons ; var $buttons ;
var $metaRefresh = false;


public function getLogic() public function getLogic()
{ {
]); ]);
} }


public function setMetaRefresh(bool $active)
{
$this->metaRefresh = $active;
}

public function getUrlManagerFrontend() public function getUrlManagerFrontend()
{ {
return \Yii::$app->urlManagerFrontend; return \Yii::$app->urlManagerFrontend;

+ 12
- 0
common/logic/Ticket/Ticket/Repository/TicketRepository.php View File

$ticketsArray = $this->createQuery()->find(); $ticketsArray = $this->createQuery()->find();
return $this->ticketSolver->countTicketsUnreadByUserFromArray($ticketsArray, $user); return $this->ticketSolver->countTicketsUnreadByUserFromArray($ticketsArray, $user);
} }

public function findTicketsAdminStatusOpen()
{
return $this->createQuery()
->filterByStatusOpen()
->find();
}

public function countTicketsAdminStatusOpen()
{
return count($this->findTicketsAdminStatusOpen());
}
} }

+ 7
- 0
common/logic/Ticket/Ticket/Repository/TicketRepositoryQuery.php View File

namespace common\logic\Ticket\Ticket\Repository; namespace common\logic\Ticket\Ticket\Repository;


use common\logic\AbstractRepositoryQuery; use common\logic\AbstractRepositoryQuery;
use common\logic\Ticket\Ticket\Model\Ticket;
use common\logic\Ticket\Ticket\Service\TicketDefinition; use common\logic\Ticket\Ticket\Service\TicketDefinition;


class TicketRepositoryQuery extends AbstractRepositoryQuery class TicketRepositoryQuery extends AbstractRepositoryQuery
{ {
$this->loadDefinition(TicketDefinition::class); $this->loadDefinition(TicketDefinition::class);
} }

public function filterByStatusOpen(): self
{
$this->andWhere(['ticket.status' => Ticket::STATUS_OPEN]);
return $this;
}
} }

+ 15
- 2
common/logic/User/User/Repository/UserRepository.php View File

return $userProducer ? $userProducer->active : false; return $userProducer ? $userProducer->active : false;
} }


public function findUsersStatusProducerOnline(): array
public function findUsersWithStatusProducerAndOnline(): array
{ {
return $this->createDefaultQuery() return $this->createDefaultQuery()
->isStatusProducer() ->isStatusProducer()


public function countUsersStatusProducerOnline(): int public function countUsersStatusProducerOnline(): int
{ {
return count($this->findUsersStatusProducerOnline());
return count($this->findUsersWithStatusProducerAndOnline());
}

public function findUsersWithStatusUserAndOnline(): array
{
return $this->createDefaultQuery()
->isStatusUser()
->filterByDateLastConnectionLessThanFewMinutes()
->find();
}

public function countUsersStatusUserOnline(): int
{
return count($this->findUsersWithStatusUserAndOnline());
} }
} }

+ 5
- 0
common/logic/User/User/Repository/UserRepositoryQuery.php View File

return $this->filterByStatus(User::STATUS_PRODUCER); return $this->filterByStatus(User::STATUS_PRODUCER);
} }


public function isStatusUser(): self
{
return $this->filterByStatus(User::STATUS_ACTIVE);
}

public function filterByDateLastConnectionLessThanFewMinutes(): self public function filterByDateLastConnectionLessThanFewMinutes(): self
{ {
$date = new \DateTime('-5 minutes'); $date = new \DateTime('-5 minutes');

Loading…
Cancel
Save