Rev 4124 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Helper;
use Laminas\View\Helper\AbstractHelper;
use Laminas\Db\Adapter\AdapterInterface;
use LeadersLinked\Mapper\ConnectionMapper;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Mapper\ChatGroupMapper;
use LeadersLinked\Mapper\UserBlockedMapper;
use LeadersLinked\Mapper\ChatGroupUserMapper;
use LeadersLinked\Model\ChatGroupUser;
class ChatHelper extends AbstractHelper
{
/**
*
* @var AdapterInterface
*/
private $adapter;
/**
*
* @param AdapterInterface $adapter
*/
public function __construct($adapter)
{
$this->adapter = $adapter;
}
/**
*
* @param int $user_id
* @return string
*/
public function __invoke($user_id)
{
$userMapper = UserMapper::getInstance($this->adapter);
$user = $userMapper->fetchOne($user_id);
$connectionMapper = ConnectionMapper:: getInstance($this->adapter);
$connectionIds = $connectionMapper->fetchAllConnectionsByUserReturnIds($user->id);
$contacts = [];
if($connectionIds) {
$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
$user_blocked_ids = $userBlockedMapper->fetchAllBlockedReturnIds($user->id);
$usersConnectetion = $userMapper->fetchAllByIds($connectionIds);
foreach($usersConnectetion as $userConnectetion)
{
if(in_array($userConnectetion->id, $user_blocked_ids)) {
continue;
}
$username = trim($userConnectetion->first_name . ' ' . $userConnectetion->last_name);
$status = $user->online ? 'LABEL_ONLINE' : 'LABEL_OFFLINE';
array_push($contacts, ['id' => $userConnectetion->uuid, 'uuid' => $userConnectetion->uuid, 'status'=> $status,'name'=> $username, 'image' => $userConnectetion->image]);
}
}
$chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
$groups = [];
$chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
$results= $chatGroupUserMapper->fetchAllByUserId($user->id);
if(is_array($results)) {
foreach ($results as $r) {
$chatGroup = $chatGroupMapper->fetchOne($r->group_id);
if($chatGroup) {
array_push($groups, ['id' => $chatGroup->uuid, 'name' => $chatGroup->name, 'owner' => $r->owner == ChatGroupUser::OWNER_YES ]);
}
}
}
return $this->getView()->render('helpers/chat.phtml', ['contacts' => $contacts, 'groups' => $groups, 'user_id' => $user->id, 'timezone' => $user->timezone]);
}
private function isInactiveConnection(string $timestamp)
{
if(empty($timestamp)) {
return true;
}
$now = date('Y-m-d H:i:s');
$datetime1=date_create($now);
$datetime2=date_create($timestamp);
$diff=date_diff($datetime1, $datetime2);
if($diff->y > 0 || $diff->m > 0 || $diff->d > 0 || $diff->h > 0 || $diff->i > 0) {
return true;
}
return ($diff->s) > 15 ? true : false;
}
}