Proyectos de Subversion LeadersLinked - Services

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
use LeadersLinked\Model\ChatGroupUserMessage;
8
use LeadersLinked\Mapper\Common\MapperCommon;
9
use Laminas\Db\Adapter\AdapterInterface;
10
use Laminas\Log\LoggerInterface;
11
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
12
use Laminas\Db\Sql\Expression;
13
use LeadersLinked\Model\ChatGroupMessage;
14
 
15
class ChatGroupUserMessageMapper extends MapperCommon
16
{
17
    const _TABLE = 'tbl_chat_group_user_messages';
18
 
19
    /**
20
     *
21
     * @var ChatGroupUserMessageMapper
22
     */
23
    private static $_instance;
24
 
25
    /**
26
     *
27
     * @param AdapterInterface $adapter
28
     * @param int $user_id
29
     */
30
    private function __construct($adapter)
31
    {
32
        parent::__construct($adapter);
33
    }
34
 
35
    /**
36
     *
37
     * @param AdapterInterface $adapter
38
     * @return ChatGroupUserMessageMapper
39
     */
40
    public static function getInstance($adapter)
41
    {
42
        if(self::$_instance == null) {
43
            self::$_instance = new ChatGroupUserMessageMapper($adapter);
44
        }
45
        return self::$_instance;
46
    }
47
 
48
 
49
    /**
50
     *
51
     * @param int $group_id
52
     * @param int $user_id
53
     * @return ChatGroupUserMessage
54
     */
55
    public function fetchLastMessage($group_id, $user_id)
56
    {
57
 
58
        $prototype = new ChatGroupUserMessage();
59
 
60
        $select = $this->sql->select(self::_TABLE);
61
        $select->where->equalTo('group_id', $group_id);
62
        $select->where->equalTo('receiver_id', $user_id);
63
        $select->where->equalTo('seen', ChatGroupUserMessage::SEEN_YES);
192 efrain 64
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 65
        $select->order('added_on DESC');
66
        $select->limit(1);
67
 
68
        return $this->executeFetchOneObject($select, $prototype);
69
    }
70
 
192 efrain 71
    /**
72
     *
73
     * @param int $id
74
     * @param int $user_id
75
     * @return ChatGroupUserMessage
76
     */
77
    public function fetchOneByIdMessageIdAndReceiverId($message_id, $receiver_id)
78
    {
79
 
80
        $prototype = new ChatGroupUserMessage();
81
 
82
        $select = $this->sql->select(self::_TABLE);
83
        $select->where->equalTo('message_id', $message_id);
84
        $select->where->equalTo('receiver_id', $receiver_id);
85
        $select->where->equalTo('seen', ChatGroupUserMessage::SEEN_YES);
86
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
87
        $select->order('added_on DESC');
88
        $select->limit(1);
89
 
90
        return $this->executeFetchOneObject($select, $prototype);
91
    }
1 efrain 92
 
192 efrain 93
 
1 efrain 94
    /**
95
     *
96
     * @param int $group_id
97
     * @param int $user_id
98
     * @return boolean
99
     */
100
    public function countNotSeenMessages($group_id, $user_id)
101
    {
102
 
103
        $select = $this->sql->select(self::_TABLE);
104
        $select->columns(['total' => new Expression('COUNT(*)')]);
105
        $select->where->equalTo('group_id', $group_id);
106
        $select->where->equalTo('receiver_id', $user_id);
107
        $select->where->equalTo('seen', ChatGroupUserMessage::SEEN_NO);
192 efrain 108
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 109
 
110
        $record = $this->executeFetchOneArray($select);
111
        return $record['total'];
112
 
113
    }
114
 
115
    /**
116
     *
117
     * @param int $group_id
118
     * @param int $user_id
119
     * @return boolean
120
     */
121
    public function countNotReceivedMessages($group_id, $user_id)
122
    {
123
 
124
        $select = $this->sql->select(self::_TABLE);
125
        $select->columns(['total' => new Expression('COUNT(*)')]);
126
        $select->where->equalTo('group_id', $group_id);
127
        $select->where->equalTo('receiver_id', $user_id);
128
        $select->where->equalTo('recd', ChatGroupUserMessage::RECD_NO);
192 efrain 129
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 130
 
131
 
132
        $record = $this->executeFetchOneArray($select);
133
        return $record['total'];
134
 
135
    }
136
 
137
 
138
 
139
    /**
140
     *
141
     * @param int $group_id
142
     * @param int $user_id
143
     * @return boolean
144
     */
145
    public function existNotSeenMessages($group_id, $user_id)
146
    {
147
        $prototype = new ChatGroupUserMessage();
148
 
149
        $select = $this->sql->select(self::_TABLE);
150
        $select->where->equalTo('group_id', $group_id);
151
        $select->where->equalTo('receiver_id', $user_id);
152
        $select->where->equalTo('seen', ChatGroupUserMessage::SEEN_NO);
192 efrain 153
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 154
        $select->limit(1);
155
 
156
        $record = $this->executeFetchOneObject($select, $prototype);
157
        return $record ? true : false;
158
 
159
    }
160
 
161
    /**
162
     *
163
     * @param int $group_id
164
     * @param int $user_id
165
     * @return boolean
166
     */
167
    public function existNotReceivedMessages($group_id, $user_id)
168
    {
169
        $prototype = new ChatGroupUserMessage();
170
 
171
        $select = $this->sql->select(self::_TABLE);
172
        $select->where->equalTo('group_id', $group_id);
173
        $select->where->equalTo('receiver_id', $user_id);
174
        $select->where->equalTo('recd', ChatGroupUserMessage::RECD_NO);
192 efrain 175
        $select->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 176
        $select->limit(1);
177
 
178
        $record = $this->executeFetchOneObject($select, $prototype);
179
        return $record ? true : false;
180
 
181
    }
182
 
183
    /**
184
     *
185
     * @param int $group_id
186
     * @param int $user_id
187
     * @return boolean
188
     */
189
    public function markAsReceivedByGroupIdAndUserId($group_id, $user_id)
190
    {
191
        $update = $this->sql->update(self::_TABLE);
192
        $update->set(['recd' => ChatGroupUserMessage::RECD_YES]);
193
        $update->where->equalTo('group_id', $group_id);
194
        $update->where->equalTo('receiver_id', $user_id);;
195
        $update->where->equalTo('recd', ChatGroupUserMessage::RECD_NO);
192 efrain 196
        $update->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 197
 
198
       // echo $update->getSqlString($this->adapter->platform);
199
 
200
        return $this->executeUpdate($update);
201
    }
202
 
203
    /**
204
     *
205
     * @param int $group_id
206
     * @param int $user_id
207
     * @return boolean
208
     */
209
    public function markAsSeenByGroupIdAndUserId($group_id, $user_id)
210
    {
211
        $update = $this->sql->update(self::_TABLE);
212
        $update->set(['recd' => ChatGroupUserMessage::RECD_YES, 'seen' => ChatGroupUserMessage::SEEN_YES]);
213
        $update->where->equalTo('group_id', $group_id);
214
        $update->where->equalTo('receiver_id', $user_id);;
215
        $update->where->equalTo('seen', ChatGroupUserMessage::SEEN_NO);
192 efrain 216
        $update->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 217
 
218
        return $this->executeUpdate($update);
219
    }
220
 
221
    /**
222
     *
223
     * @param ChatGroupUserMessage $chatGroupUserMessage
224
     * @return boolean
225
     */
226
    public function insert($chatGroupUserMessage)
227
    {
228
        $hydrator = new ObjectPropertyHydrator();
229
        $values = $hydrator->extract($chatGroupUserMessage);
230
        $values = $this->removeEmpty($values);
231
 
232
        $insert = $this->sql->insert(self::_TABLE);
233
        $insert->values($values);
234
 
235
        return $this->executeInsert($insert);
236
    }
237
 
238
    /*
239
    public function deleteAllByMessageIds($message_ids)
240
    {
241
        $delete = $this->sql->delete(self::_TABLE);
242
        $delete->where->in('message_id', $message_ids);
243
 
244
        return $this->executeDelete($delete);
245
    }
246
    */
247
 
248
    public function deleteAllByGroupId($group_id)
249
    {
192 efrain 250
        $update = $this->sql->update(self::_TABLE);
251
        $update->set([
252
            'status' => ChatGroupUserMessage::STATUS_DELETED,
253
        ]);
254
        $update->where->equalTo('group_id', $group_id);
255
        $update->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
1 efrain 256
 
257
        //echo $delete->getSqlString($this->adapter->platform); exit;
258
 
192 efrain 259
        return $this->executeUpdate($update);
1 efrain 260
    }
192 efrain 261
 
262
    /**
263
     *
264
     * @param int $group_id
265
     * @param int $user_id
266
     * @return boolean
267
     */
268
    public function markAsReportedByGroupIdAndUserId($group_id, $user_id)
269
    {
270
        $update = $this->sql->update(self::_TABLE);
271
        $update->set(['status' => ChatGroupUserMessage::STATUS_REPORTED]);
272
        $update->where->equalTo('group_id', $group_id);
273
        $update->where->equalTo('receiver_id', $user_id);;
274
        $update->where->equalTo('seen', ChatGroupUserMessage::SEEN_NO);
275
        $update->where->equalTo('status', ChatGroupUserMessage::STATUS_PUBLISHED);
276
 
277
        return $this->executeUpdate($update);
278
    }
1 efrain 279
 
280
}