Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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;
        
    }
}