Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3086 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Helper;
5
 
6
use Laminas\View\Helper\AbstractHelper;
7
use Laminas\Db\Adapter\AdapterInterface;
8
use LeadersLinked\Mapper\ConnectionMapper;
9
use LeadersLinked\Mapper\UserMapper;
10
use LeadersLinked\Mapper\ChatGroupMapper;
11
use LeadersLinked\Mapper\UserBlockedMapper;
12
use LeadersLinked\Mapper\ChatGroupUserMapper;
13
use LeadersLinked\Model\ChatGroupUser;
14
 
15
class ChatHelper extends AbstractHelper
16
{
17
    /**
18
     *
19
     * @var AdapterInterface
20
     */
21
    private $adapter;
22
 
23
 
24
    /**
25
     *
26
     * @param AdapterInterface $adapter
27
     */
28
    public function __construct($adapter)
29
    {
30
        $this->adapter      = $adapter;
31
    }
32
 
33
    /**
34
     *
35
     * @param int $user_id
36
     * @return string
37
     */
38
    public function __invoke($user_id)
39
    {
40
        $connectionMapper = ConnectionMapper:: getInstance($this->adapter);
41
        $connectionIds = $connectionMapper->fetchAllConnectionsByUserReturnIds($user_id);
42
 
43
        $contacts = [];
44
        if($connectionIds) {
45
 
46
            $userMapper = UserMapper::getInstance($this->adapter);
47
            $users = $userMapper->fetchAllByIds($connectionIds);
48
 
49
 
50
            $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
51
            $user_blocked_ids = $userBlockedMapper->fetchAllBlockedReturnIds($user_id);
52
 
53
 
54
 
55
            foreach($users as $user)
56
            {
57
                if(in_array($user->id, $user_blocked_ids)) {
58
                    continue;
59
                }
60
 
61
                $username = trim($user->first_name . ' ' . $user->last_name);
62
 
63
 
64
                if($this->isInactiveConnection($user->last_heart_beat_at ? $user->last_heart_beat_at : '')) {
65
                    $userMapper->updateChatOfflineStatus($user->id);
66
                    $status = "Offline";
67
                } else {
68
                    $userMapper->updateChatOnlineStatus($user->id);
69
                    $status = "Online";
70
                }
71
 
72
                array_push($contacts, ['id' => $user->uuid, 'uuid' => $user->uuid, 'status'=> $status,'name'=> $username, 'image' => $user->image]);
73
 
74
            }
75
        }
76
 
77
        $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
78
 
79
        $groups = [];
80
        $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
81
        $results= $chatGroupUserMapper->fetchAllByUserId($user_id);
82
 
83
 
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
        if(is_array($results)) {
92
            foreach ($results as $r) {
93
 
94
                $chatGroup = $chatGroupMapper->fetchOne($r->group_id);
95
                if($chatGroup) {
96
                    array_push($groups, ['id' => $chatGroup->uuid,   'name' => $chatGroup->name,  'owner' => $r->owner == ChatGroupUser::OWNER_YES ]);
97
                }
98
 
99
            }
100
        }
101
 
102
 
103
        return $this->getView()->render('helpers/chat.phtml', ['contacts' => $contacts, 'groups' => $groups, 'user_id' => $user_id]);
104
    }
105
 
106
    private function isInactiveConnection(string $timestamp)
107
    {
108
        if(empty($timestamp)) {
109
            return true;
110
        }
111
 
112
        $now = date('Y-m-d H:i:s');
113
        $datetime1=date_create($now);
114
        $datetime2=date_create($timestamp);
115
        $diff=date_diff($datetime1, $datetime2);
116
 
117
        if($diff->y > 0 || $diff->m > 0 || $diff->d > 0 || $diff->h > 0 || $diff->i > 0) {
118
            return true;
119
        }
120
 
121
 
122
        return ($diff->s) > 15 ? true : false;
123
 
124
    }
125
}