@@ -0,0 +1,79 @@ | |||
<?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, | |||
]); | |||
} | |||
} |
@@ -78,15 +78,6 @@ class ProducerAdminController extends BackendController | |||
]; | |||
} | |||
public function actionOnline() | |||
{ | |||
$usersWithStatusProducerOnlineArray = $this->getUserModule()->getRepository()->findUsersStatusProducerOnline(); | |||
return $this->render('@backend/views/producer-admin/online', [ | |||
'usersWithStatusProducerOnlineArray' => $usersWithStatusProducerOnlineArray, | |||
]); | |||
} | |||
/** | |||
* Liste les producteurs. | |||
* |
@@ -581,7 +581,7 @@ class UserController extends BackendController | |||
$duration = 0; | |||
Yii::$app->user->switchIdentity($user, $duration); | |||
Yii::$app->session->set('user.idbeforeswitch', $initialId); | |||
return $this->redirect(['index']); | |||
return $this->redirect($this->getUrlManagerFrontend()->createUrl(['site/index'])); | |||
} | |||
} else { | |||
throw new NotFoundHttpException('Page introuvable'); |
@@ -76,10 +76,14 @@ $isUserCurrentGrantedAsProducer = $userModule->getAuthorizationChecker()->isGran | |||
$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) { | |||
$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(); | |||
@@ -89,7 +93,25 @@ $isUserCurrentGrantedAsProducer = $userModule->getAuthorizationChecker()->isGran | |||
$countUsersWithStatusProducerOnline = $userModule->getRepository()->countUsersStatusProducerOnline(); | |||
$countUsersWithStatusProducerOnlineLabel = ''; | |||
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>'; | |||
} | |||
?> | |||
@@ -184,16 +206,16 @@ $isUserCurrentGrantedAsProducer = $userModule->getAuthorizationChecker()->isGran | |||
[ | |||
'label' => 'En ligne', | |||
'icon' => 'wifi', | |||
'url' => ['producer-admin/online'], | |||
'url' => ['online-admin/index'], | |||
'visible' => $isUserCurrentGrantedAsAdministrator, | |||
'template' => '<a href="{url}">{icon} {label}' . $countUsersWithStatusProducerOnlineLabel . '</a>' | |||
'template' => '<a href="{url}">{icon} {label}' . $countUsersOnlineLabel . '</a>' | |||
], | |||
[ | |||
'label' => 'Support', | |||
'icon' => 'comments', | |||
'url' => ['support-admin/index'], | |||
'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], | |||
[ |
@@ -68,6 +68,9 @@ if (Yii::$app->controller->action->id === 'login') { | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<meta name="baseurl" content="<?= 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() ?> | |||
<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" /> |
@@ -0,0 +1,132 @@ | |||
<?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> |
@@ -1,85 +0,0 @@ | |||
<?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> |
@@ -2980,16 +2980,28 @@ termes. | |||
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; | |||
} | |||
/* 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-weight: normal; | |||
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 */ | |||
.feature-admin-index table th.only-for-selected-producers, |
@@ -0,0 +1,24 @@ | |||
.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; | |||
} | |||
} | |||
} | |||
} |
@@ -1,12 +0,0 @@ | |||
.producer-admin-online { | |||
.box { | |||
height: 250px; | |||
.profile-username { | |||
font-family: 'Source Sans Pro',sans-serif; | |||
font-weight: normal; | |||
font-size: 18px; | |||
} | |||
} | |||
} |
@@ -1530,7 +1530,7 @@ a.btn, button.btn { | |||
@import "support/_index.scss"; | |||
@import "support/_view.scss"; | |||
@import "producer-admin/_index.scss"; | |||
@import "producer-admin/_online.scss"; | |||
@import "online-admin/_index.scss"; | |||
@import "feature-admin/_index.scss"; | |||
@import "setting/_form.scss"; | |||
@import "_responsive.scss" ; |
@@ -48,6 +48,7 @@ class View extends \yii\web\View | |||
var $icon; | |||
var $page_title ; | |||
var $buttons ; | |||
var $metaRefresh = false; | |||
public function getLogic() | |||
{ | |||
@@ -113,6 +114,11 @@ class View extends \yii\web\View | |||
]); | |||
} | |||
public function setMetaRefresh(bool $active) | |||
{ | |||
$this->metaRefresh = $active; | |||
} | |||
public function getUrlManagerFrontend() | |||
{ | |||
return \Yii::$app->urlManagerFrontend; |
@@ -46,4 +46,16 @@ class TicketRepository extends AbstractRepository | |||
$ticketsArray = $this->createQuery()->find(); | |||
return $this->ticketSolver->countTicketsUnreadByUserFromArray($ticketsArray, $user); | |||
} | |||
public function findTicketsAdminStatusOpen() | |||
{ | |||
return $this->createQuery() | |||
->filterByStatusOpen() | |||
->find(); | |||
} | |||
public function countTicketsAdminStatusOpen() | |||
{ | |||
return count($this->findTicketsAdminStatusOpen()); | |||
} | |||
} |
@@ -3,6 +3,7 @@ | |||
namespace common\logic\Ticket\Ticket\Repository; | |||
use common\logic\AbstractRepositoryQuery; | |||
use common\logic\Ticket\Ticket\Model\Ticket; | |||
use common\logic\Ticket\Ticket\Service\TicketDefinition; | |||
class TicketRepositoryQuery extends AbstractRepositoryQuery | |||
@@ -13,4 +14,10 @@ class TicketRepositoryQuery extends AbstractRepositoryQuery | |||
{ | |||
$this->loadDefinition(TicketDefinition::class); | |||
} | |||
public function filterByStatusOpen(): self | |||
{ | |||
$this->andWhere(['ticket.status' => Ticket::STATUS_OPEN]); | |||
return $this; | |||
} | |||
} |
@@ -268,7 +268,7 @@ class UserRepository extends AbstractRepository | |||
return $userProducer ? $userProducer->active : false; | |||
} | |||
public function findUsersStatusProducerOnline(): array | |||
public function findUsersWithStatusProducerAndOnline(): array | |||
{ | |||
return $this->createDefaultQuery() | |||
->isStatusProducer() | |||
@@ -278,6 +278,19 @@ class UserRepository extends AbstractRepository | |||
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()); | |||
} | |||
} |
@@ -51,6 +51,11 @@ class UserRepositoryQuery extends AbstractRepositoryQuery | |||
return $this->filterByStatus(User::STATUS_PRODUCER); | |||
} | |||
public function isStatusUser(): self | |||
{ | |||
return $this->filterByStatus(User::STATUS_ACTIVE); | |||
} | |||
public function filterByDateLastConnectionLessThanFewMinutes(): self | |||
{ | |||
$date = new \DateTime('-5 minutes'); |