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 Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Db\ResultSet\HydratingResultSet;
9
use Laminas\Paginator\Adapter\DbSelect;
10
use Laminas\Paginator\Paginator;
11
use Laminas\Log\LoggerInterface;
12
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
13
use LeadersLinked\Model\ChatMessage;
14
use LeadersLinked\Mapper\Common\MapperCommon;
15
use Laminas\Db\Sql\Expression;
16
 
17
 
18
class ChatMessageMapper extends MapperCommon
19
{
20
    const _TABLE = 'tbl_chat_messages';
21
 
22
    /**
23
     *
24
     * @var ChatMessageMapper
25
     */
26
    private static $_instance;
27
 
28
    /**
29
     *
30
     * @param AdapterInterface $adapter
31
     * @param int $user_id
32
     */
33
    private function __construct($adapter)
34
    {
35
        parent::__construct($adapter);
36
    }
37
 
38
    /**
39
     *
40
     * @param AdapterInterface $adapter
41
     * @return ChatMessageMapper
42
     */
43
    public static function getInstance($adapter)
44
    {
45
        if(self::$_instance == null) {
46
            self::$_instance = new ChatMessageMapper($adapter);
47
        }
48
        return self::$_instance;
49
    }
50
 
51
    /**
52
     *
53
     * @param int $from_id
54
     * @param int $to_id
55
     * @return boolean
56
     */
57
    public function countNotSeenMessagesByChatIdAndToId($chat_id, $to_id)
58
    {
59
        $select = $this->sql->select(self::_TABLE);
60
        $select->columns(['total' => new Expression('COUNT(*)')]);
61
        $select->where->equalTo('chat_id', $chat_id);
62
        $select->where->equalTo('to_id', $to_id);
63
        $select->where->equalTo('seen', ChatMessage::SEEN_NO);
192 efrain 64
        $select->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
1 efrain 65
 
192 efrain 66
 
1 efrain 67
        $record = $this->executeFetchOneArray($select);
68
        return $record['total'];
69
    }
70
 
71
    /**
72
     *
73
     * @param int $from_id
74
     * @param int $to_id
75
     * @return boolean
76
     */
77
    public function countNotReceivedMessagesByChatIdAndToId($chat_id, $to_id)
78
    {
79
        $select = $this->sql->select(self::_TABLE);
80
        $select->columns(['total' => new Expression('COUNT(*)')]);
81
        $select->where->equalTo('chat_id', $chat_id);
82
        $select->where->equalTo('to_id', $to_id);
83
        $select->where->equalTo('recd', ChatMessage::RECD_NO);
192 efrain 84
        $select->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
85
 
1 efrain 86
        $record = $this->executeFetchOneArray($select);
87
        return $record['total'];
88
    }
89
 
90
 
91
    /**
92
     *
93
     * @param int $from_id
94
     * @param int $to_id
95
     * @return boolean
96
     */
97
    public function existNotSeenMessagesByChatIdAndToId($chat_id, $to_id)
98
    {
99
        $prototype = new ChatMessage();
100
 
101
        $select = $this->sql->select(self::_TABLE);
102
        $select->where->equalTo('chat_id', $chat_id);
103
        $select->where->equalTo('to_id', $to_id);
104
        $select->where->equalTo('seen', ChatMessage::SEEN_NO);
192 efrain 105
        $select->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
106
 
1 efrain 107
        $select->limit(1);
108
 
109
        $record = $this->executeFetchOneObject($select, $prototype);
110
        return $record ? true : false;
111
 
112
    }
113
 
114
    /**
115
     *
116
     * @param int $from_id
117
     * @param int $to_id
118
     * @return boolean
119
     */
120
    public function existNotReceivedMessagesByChatIdAndToId($chat_id, $to_id)
121
    {
122
        $prototype = new ChatMessage();
123
 
124
        $select = $this->sql->select(self::_TABLE);
125
        $select->where->equalTo('chat_id', $chat_id);
126
        $select->where->equalTo('to_id', $to_id);
127
        $select->where->equalTo('recd', ChatMessage::RECD_NO);
192 efrain 128
        $select->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
129
 
1 efrain 130
        $select->limit(1);
131
 
132
        $record = $this->executeFetchOneObject($select, $prototype);
133
        return $record ? true : false;
134
 
135
    }
136
 
137
    /**
138
     *
139
     * @param int $group_id
140
     * @param int $user_id
141
     * @return ChatMessage()
142
     */
143
    public function fetchLastMessage($chat_id, $to_id)
144
    {
145
 
146
        $prototype = new ChatMessage();
147
 
148
        $select = $this->sql->select(self::_TABLE);
149
        $select->where->equalTo('chat_id', $chat_id);
150
        $select->where->equalTo('to_id', $to_id);
151
        $select->where->equalTo('recd', ChatMessage::SEEN_YES);
192 efrain 152
        $select->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
153
 
1 efrain 154
        $select->order('added_on DESC');
155
        $select->limit(1);
156
 
157
        return $this->executeFetchOneObject($select, $prototype);
158
    }
159
 
160
 
161
    /**
162
     *
163
     * @param int $from_id
164
     * @param int $to_id
165
     * @return boolean
166
     */
167
    public function markAsReceivedByChatIdAndToId($chat_id, $to_id)
168
    {
169
        $update = $this->sql->update(self::_TABLE);
170
        $update->set(['recd' => ChatMessage::RECD_YES]);
171
        $update->where->equalTo('chat_id', $chat_id);
172
        $update->where->equalTo('to_id', $to_id);
173
        $update->where->equalTo('recd', ChatMessage::RECD_NO);
192 efrain 174
        $update->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
1 efrain 175
 
176
 
177
        return $this->executeUpdate($update);
178
    }
179
 
180
    /**
181
     *
182
     * @param int $to_id
183
     * @return boolean
184
     */
185
    public function markAsSeenByChatIdAndToId($chat_id, $to_id)
186
    {
187
        $update = $this->sql->update(self::_TABLE);
188
        $update->set(['recd' => ChatMessage::RECD_YES, 'seen' => ChatMessage::SEEN_YES]);
189
        $update->where->equalTo('chat_id', $chat_id);
190
        $update->where->equalTo('to_id', $to_id);
191
        $update->where->equalTo('seen', ChatMessage::SEEN_NO);
192 efrain 192
        $update->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
1 efrain 193
 
192 efrain 194
 
1 efrain 195
        return $this->executeUpdate($update);
196
    }
192 efrain 197
 
198
    /**
199
     *
200
     * @param int $to_id
201
     * @return boolean
202
     */
203
    public function markReportedByChatIdAndToId($chat_id, $to_id)
204
    {
205
        $update = $this->sql->update(self::_TABLE);
206
        $update->set(['status' => ChatMessage::STATUS_REPORTED]);
207
        $update->where->equalTo('chat_id', $chat_id);
208
        $update->where->equalTo('to_id', $to_id);
1 efrain 209
 
192 efrain 210
 
211
 
212
        return $this->executeUpdate($update);
213
    }
214
 
1 efrain 215
 
216
    /**
217
     *
218
     * @param int $chat_id
219
     * @return boolean
220
     */
221
    public function deleteAllByChatId($chat_id)
222
    {
192 efrain 223
        $update = $this->sql->update(self::_TABLE);
224
        $update->set([
225
            'status' => ChatMessage::STATUS_DELETED
226
        ]);
227
 
228
        $update->where->equalTo('chat_id', $chat_id);
229
        $update->where->equalTo('status', ChatMessage::STATUS_PUBLISHED);
1 efrain 230
 
192 efrain 231
        return $this->executeUpdate($update);
1 efrain 232
    }
233
 
234
    /**
235
     *
236
     * @param int $chat_id
237
     * @param int $page
238
     * @param int $records_per_page
239
     * @return Paginator
240
     */
241
    public function getAllMessagesPaginatorByChatId($chat_id, $page = 1, $records_per_page = 10)
242
    {
243
        $select = $this->sql->select(self::_TABLE);
244
        $select->where->equalTo('chat_id', $chat_id);
245
        $select->order('id DESC');
246
 
247
 
248
        //echo $select->getSqlString($this->adapter->getPlatform()); exit;
249
 
250
        $prototype  = new ChatMessage();
251
        $hydrator   = new ObjectPropertyHydrator();
252
        $resultset  = new HydratingResultSet($hydrator, $prototype);
253
 
254
        $adapter    = new DbSelect($select, $this->sql, $resultset);
255
        $paginator  = new Paginator($adapter);
256
        $paginator->setCurrentPageNumber($page);
257
        $paginator->setItemCountPerPage($records_per_page);
258
 
259
        return $paginator;
260
    }
261
 
262
    /**
263
     *
264
     * @param ChatMessage $chatMessage
265
     * @return boolean
266
     */
267
    public function insert($chatMessage)
268
    {
269
        $hydrator = new ObjectPropertyHydrator();
270
        $values = $hydrator->extract($chatMessage);
271
        $values = $this->removeEmpty($values);
272
 
273
        $insert = $this->sql->insert(self::_TABLE);
274
        $insert->values($values);
275
 
276
        $result = $this->executeInsert($insert);
277
        if($result) {
278
            $chatMessage->id = $this->lastInsertId;
279
        }
280
        return $result;
281
    }
282
 
192 efrain 283
    /**
284
     *
285
     * @param string $uuid
286
     * @return ChatMessage
287
     */
288
    public function fetchOneByUuid($uuid)
289
    {
290
        $prototype = new ChatMessage();
291
 
292
        $select = $this->sql->select(self::_TABLE);
293
        $select->where->equalTo('uuid', $uuid);
294
 
295
        return $this->executeFetchOneObject($select, $prototype);
296
    }
1 efrain 297
 
192 efrain 298
 
1 efrain 299
    /**
300
     *
301
     * @param int $id
302
     * @return ChatMessage
303
     */
304
    public function fetchOne($id)
305
    {
306
        $prototype = new ChatMessage();
307
 
308
        $select = $this->sql->select(self::_TABLE);
309
        $select->where->equalTo('id', $id);
310
 
311
        return $this->executeFetchOneObject($select, $prototype);
312
    }
313
}