Proyectos de Subversion LeadersLinked - Services

Rev

Rev 293 | Rev 295 | Ir a la última revisión | | Comparar con el anterior | 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\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
 
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\UserMapper;
15
 
16
use LeadersLinked\Model\User;
17
 
18
use LeadersLinked\Mapper\UserBlockedMapper;
19
 
20
use LeadersLinked\Mapper\CompanyMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
22
use LeadersLinked\Library\Image;
23
use Laminas\View\Model\JsonModel;
24
use Laminas\Mvc\I18n\Translator;
199 efrain 25
use LeadersLinked\Mapper\AbuseReportMapper;
26
use LeadersLinked\Model\AbuseReport;
261 efrain 27
use LeadersLinked\Library\ExternalCredentials;
28
use LeadersLinked\Library\Storage;
29
use LeadersLinked\Form\InMail\SendForm;
291 www 30
use PHPMailer\PHPMailer\PHPMailer;
1 efrain 31
 
261 efrain 32
 
1 efrain 33
class InMailController extends AbstractActionController
34
{
261 efrain 35
    const _SIZE_PAGE = 10;
283 www 36
 
261 efrain 37
 
1 efrain 38
    /**
39
     *
40
     * @var \Laminas\Db\Adapter\AdapterInterface
41
     */
42
    private $adapter;
43
 
44
    /**
45
     *
46
     * @var \LeadersLinked\Cache\CacheInterface
47
     */
48
    private $cache;
49
 
50
 
51
    /**
52
     *
53
     * @var \Laminas\Log\LoggerInterface
54
     */
55
    private $logger;
56
 
57
    /**
58
     *
59
     * @var array
60
     */
61
    private $config;
62
 
63
 
64
    /**
65
     *
66
     * @var \Laminas\Mvc\I18n\Translator
67
     */
68
    private $translator;
69
 
70
 
71
    /**
72
     *
73
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
74
     * @param \LeadersLinked\Cache\CacheInterface $cache
75
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
76
     * @param array $config
77
     * @param \Laminas\Mvc\I18n\Translator $translator
78
     */
79
    public function __construct($adapter, $cache, $logger, $config, $translator)
80
    {
81
        $this->adapter      = $adapter;
82
        $this->cache        = $cache;
83
        $this->logger       = $logger;
84
        $this->config       = $config;
85
        $this->translator   = $translator;
86
    }
87
 
88
    /**
89
     *
90
     * Generación del listado de conversationes
91
     *
92
     * [
93
     *  success: true,
94
     *  data:[
261 efrain 95
     *    messages :
1 efrain 96
     *    [
97
     *       uuid: uuid con quien se tiene la conversación,
98
     *       name: nombre de con quien se tiene la conversacion,
99
     *       image: imagen de con quien se tiene la conversación,
261 efrain 100
     *       subject: asunto del mensaje
101
     *       date: fecha del ultimo mensaje,
102
     *       seen: true|false,
1 efrain 103
     *       send_link: url para enviar el mensaje,
261 efrain 104
     *       open_link : url para leer el mensaje,
105
     *       delete_link : url para leer el mensaje,
106
     *     ],
107
     *     'total_messages' : total de mensajes,
108
     *     'total_pages' : total de páginas 10 en 10,
109
     *     'current_page' : página actual
1 efrain 110
     *  ]
111
     *
112
     *
113
     * @return \Laminas\View\Model\JsonModel
114
     */
115
    public function indexAction()
116
    {
117
        $request = $this->getRequest();
118
        if ($request->isGet()) {
119
            $currentUserPlugin = $this->plugin('currentUserPlugin');
120
            $currentUser = $currentUserPlugin->getUser();
261 efrain 121
 
122
            $page = intval($this->params()->fromQuery('page', 0), 10);
123
 
283 www 124
            $storage = Storage::getInstance($this->config);
125
 
261 efrain 126
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
127
            $externalCredentials->getUserBy($currentUser->id);
1 efrain 128
 
261 efrain 129
            $host       = trim($this->config['leaderslinked.inmail.host']);
130
            $port       = intval($this->config['leaderslinked.inmail.port_imap'], 10);
131
            $mailbox    = trim($this->config['leaderslinked.inmail.mailbox']);
199 efrain 132
 
1 efrain 133
 
261 efrain 134
            $username   = $externalCredentials->getUsernameInmail();
135
            $password   =  $externalCredentials->getPasswordInmail();
136
 
137
            $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
199 efrain 138
 
261 efrain 139
            try {
140
                \Eden\Core\Control::i();
141
                $client = eden('mail')->imap(
142
                    $host,
143
                    $username,
144
                    $password,
145
                    $port,
146
                    false);
1 efrain 147
 
261 efrain 148
                $client->setActiveMailbox($mailbox);
149
 
150
                //$emails = $imap->getEmails(0, 3);
151
                $maxMessages = $client->getEmailTotal();
1 efrain 152
 
261 efrain 153
                if($maxMessages > self::_SIZE_PAGE) {
154
 
155
 
156
                    $maxPages = (int)  $maxMessages / self::_SIZE_PAGE;
157
                    if(($maxPages * self::_SIZE_PAGE) <  $maxMessages) {
158
                        $maxPages++;
159
                    }
160
                } else {
161
                    $maxPages = 1;
162
                    $page = 1;
163
                }
164
 
165
                $page = $page > 0 ? $page : 1;
166
                $page = $page > $maxPages ? $maxPages : $page;
167
 
168
                if($page == 1) {
169
                    $low = 0;
170
                    $high = self::_SIZE_PAGE - 1;
171
                } else {
172
                    $low = ($page - 1) * self::_SIZE_PAGE;
173
                    $high = $low + ( self::_SIZE_PAGE - 1);
174
                }
175
 
176
                $users = [];
177
                $messages = [];
178
                if( $maxMessages ) {
179
                    $emails = $client->getEmails($low, $high);
180
                    foreach($emails as $email)
181
                    {
199 efrain 182
 
261 efrain 183
 
184
 
185
                        $from = $email['from']['email'];
186
 
187
                        if(isset($users[ $from ])) {
188
                            $user = $users[ $from ];
189
                        } else {
190
                            $user = $userMapper->fetchOneByUsernameInmailAndNetworkId($from, $currentUser->network_id);
191
                            $users[ $from ] = $user;
192
                        }
193
 
194
 
195
                        $seen = false;
196
                        if(is_array($email['flags'])) {
197
                            foreach($email['flags'] as $flag)
198
                            {
199
                                if($flag == 'seen') {
200
                                    $seen = 1;
201
                                    break;
1 efrain 202
                                }
203
                            }
204
                        }
199 efrain 205
 
261 efrain 206
 
199 efrain 207
 
261 efrain 208
                        $message =  [
209
                            'uuid' => $user->uuid,
210
                            'name' => $user->first_name . ' ' . $user->last_name,
283 www 211
                            'image' => $storage->getUserImage($user),
261 efrain 212
                            'subject' => $email['subject'],
213
                            'date' => date('Y-m-d h:i a', $email['date']),
214
                            'seen' => $seen,
283 www 215
                            'email_id' => $email['uid'],
261 efrain 216
                            'block_link' => $this->url()->fromRoute('inmail/user/block',[ 'id' => $user->uuid ], ['force_canonical' => true]),
217
                            'send_link' => $this->url()->fromRoute('inmail/message/send',[ 'id' => $user->uuid ], ['force_canonical' => true]),
218
                            'get_link' =>  $this->url()->fromRoute('inmail/message/get',[ 'id' => $email['uid'] ], ['force_canonical' => true]),
219
                            'delete_link'=>    $this->url()->fromRoute('inmail/message/delete',[ 'id' => $email['uid'] ], ['force_canonical' => true]),
220
                       ];
221
 
222
 
223
                        array_push($messages, $message);
224
 
1 efrain 225
                    }
261 efrain 226
 
1 efrain 227
                }
261 efrain 228
 
229
                $client->disconnect();
230
 
231
                $data = [
232
                    'success' => true,
233
                    'data' => [
234
                        'messages'          => $messages,
235
                        'total_messages'    => $maxMessages,
236
                        'total_pages'       => $maxPages,
237
                        'current_page'      => $page,
238
                    ]
239
                ];
240
 
241
 
242
                return new JsonModel($data);
243
 
244
            } catch (\Exception $e) {
245
 
246
                return new JsonModel([
247
                    'success' => false,
248
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
249
                ]);
250
            }
251
 
252
           /*
253
            *
254
            * (
255
    [0] => Array
256
        (
257
            [id] => <6f27ed6a-d554-4f0b-b9ee-7c708cca8b33@inmail.leaderslinked.com>
258
            [parent] =>
259
            [topic] => Test 1
260
            [mailbox] => INBOX
261
            [uid] => 8
262
            [date] => 1721906994
263
            [subject] => Test 1
264
            [from] => Array
265
                (
266
                    [name] => Efrain Yanez
267
                    [email] => efrain.yanez@inmail.leaderslinked.com
268
                )
1 efrain 269
 
261 efrain 270
            [flags] => Array
271
                (
272
                    [0] => seen
273
                )
1 efrain 274
 
261 efrain 275
            [to] => Array
276
                (
277
                    [0] => Array
278
                        (
279
                            [name] =>
280
                            [email] => santiago.olivera@inmail.leaderslinked.com
281
                        )
1 efrain 282
 
261 efrain 283
                )
1 efrain 284
 
261 efrain 285
            [cc] => Array
286
                (
287
                )
1 efrain 288
 
261 efrain 289
            [bcc] => Array
290
                (
291
                )
1 efrain 292
 
261 efrain 293
            [attachment] => 1
294
 
295
        )
296
        (
297
    [id] => <6f27ed6a-d554-4f0b-b9ee-7c708cca8b33@inmail.leaderslinked.com>
298
    [parent] =>
299
    [topic] => Test 1
300
    [mailbox] => INBOX
301
    [uid] => 8
302
    [date] => 1721906994
303
    [subject] => Test 1
304
    [from] => Array
305
        (
306
            [name] => Efrain Yanez
307
            [email] => efrain.yanez@inmail.leaderslinked.com
308
        )
1 efrain 309
 
261 efrain 310
    [flags] => Array
311
        (
312
            [0] => seen
313
        )
1 efrain 314
 
261 efrain 315
    [to] => Array
316
        (
317
            [0] => Array
318
                (
319
                    [name] =>
320
                    [email] => santiago.olivera@inmail.leaderslinked.com
321
                )
1 efrain 322
 
261 efrain 323
        )
1 efrain 324
 
261 efrain 325
    [cc] => Array
326
        (
327
        )
1 efrain 328
 
261 efrain 329
    [bcc] => Array
330
        (
331
        )
332
[body] => 'esto es una pryeba',
333
    [attachment] => Array
334
        (
335
            [POST 1080X1080-03-37.png] => Array
336
                (
337
                    [image/png] => �PNG
1 efrain 338
 
261 efrain 339
 
340
 
341
 
342
 
343
 
344
        [futbol-720p-230714 - Copy (1).mp4] => Array
345
                (
346
                    [video/mp4]
347
 
348
            *
349
            *
350
            Array
351
(
352
    [0] => __construct
353
    [1] => connect
354
    [2] => disconnect
355
    [3] => getActiveMailbox
356
    [4] => getEmails
357
    [5] => getEmailTotal
358
    [6] => getNextUid
359
    [7] => getMailboxes
360
    [8] => getUniqueEmails
361
    [9] => move
362
    [10] => copy
363
    [11] => remove
364
    [12] => expunge
365
    [13] => search
366
    [14] => searchTotal
367
    [15] => setActiveMailbox
368
    [16] => i
369
    [17] => __call
370
    [18] => __invoke
371
    [19] => __toString
372
    [20] => addMethod
373
    [21] => callArray
374
    [22] => inspect
375
    [23] => loadState
376
    [24] => loop
377
    [25] => off
378
    [26] => on
379
    [27] => saveState
380
    [28] => trigger
381
    [29] => when
382
)
383
            */
384
 
1 efrain 385
        } else {
386
            return new JsonModel([
387
                'success' => false,
388
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
389
            ]);
390
        }
391
    }
261 efrain 392
 
393
    public function getAttachmentAction()
1 efrain 394
    {
395
        $request = $this->getRequest();
396
        if ($request->isGet()) {
397
            $currentUserPlugin = $this->plugin('currentUserPlugin');
398
            $currentUser = $currentUserPlugin->getUser();
399
 
261 efrain 400
            $id = intval($this->params()->fromRoute('id'), 10);
401
            $attachment = intval($this->params()->fromRoute('attachment'), 10);
199 efrain 402
 
261 efrain 403
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
404
            $externalCredentials->getUserBy($currentUser->id);
199 efrain 405
 
261 efrain 406
            $host       = trim($this->config['leaderslinked.inmail.host']);
407
            $port       = intval($this->config['leaderslinked.inmail.port_imap'], 10);
408
            $mailbox    = trim($this->config['leaderslinked.inmail.mailbox']);
409
 
410
 
411
            $username   = $externalCredentials->getUsernameInmail();
412
            $password   =  $externalCredentials->getPasswordInmail();
413
 
414
 
415
 
416
 
417
            try {
418
                \Eden\Core\Control::i();
419
                $client = eden('mail')->imap(
420
                    $host,
421
                    $username,
422
                    $password,
423
                    $port,
424
                    false);
425
 
426
                $client->setActiveMailbox($mailbox);
427
 
428
                $email = $client->getUniqueEmails($id, true);
429
                $client->disconnect();
430
 
431
                if($email['uid']) {
432
 
433
 
434
                    $base64         = '';
435
                    $contentType    = '';
436
                    $filename       = '';
437
 
438
                    if(!empty($email['attachment']) &&  is_array($email['attachment'])) {
199 efrain 439
 
261 efrain 440
 
199 efrain 441
 
261 efrain 442
                        foreach($email['attachment'] as $filename => $data)
443
                        {
444
 
445
                            $i = 0;
446
                            foreach($data as $contentType => $value)
447
                            {
448
                                if($i == $attachment) {
449
                                    $base64 = base64_encode($value);
450
                                    break;
451
                                }
452
                                $i++;
453
                            }
199 efrain 454
                        }
261 efrain 455
                    }
456
 
457
                    if($base64) {
458
                        return new JsonModel([
459
                            'success' => true,
460
                            'data' => [
461
                                'filename' => $filename,
462
                                'mime-type' => $contentType,
463
                                'base64' =>  $base64,
464
                            ]
465
                        ]);
466
                    } else {
467
                        return new JsonModel([
468
                            'success' => false,
469
                            'data' =>  'ERROR_INMAIL_MESSAGE_ATTACHMENT_NOT_FOUND'
470
                        ]);
471
                    }
472
 
473
 
474
 
475
 
476
 
1 efrain 477
 
261 efrain 478
 
479
                } else {
480
                    return new JsonModel([
481
                        'success' => false,
482
                        'data' => 'ERROR_INMAIL_MESSAGE_NOT_FOUND'
483
                    ]);
1 efrain 484
                }
261 efrain 485
 
486
 
487
            } catch (\Exception $e) {
488
 
1 efrain 489
                return new JsonModel([
261 efrain 490
                    'success' => false,
491
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
1 efrain 492
                ]);
493
            }
261 efrain 494
 
495
 
496
 
1 efrain 497
        } else {
498
            return new JsonModel([
499
                'success' => false,
500
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
501
            ]);
502
        }
503
    }
261 efrain 504
 
505
    public function getMessageAction()
1 efrain 506
    {
507
        $request = $this->getRequest();
261 efrain 508
        if ($request->isGet()) {
1 efrain 509
            $currentUserPlugin = $this->plugin('currentUserPlugin');
510
            $currentUser = $currentUserPlugin->getUser();
511
 
261 efrain 512
            $id = intval($this->params()->fromRoute('id'), 10);
513
 
283 www 514
            $storage = Storage::getInstance($this->config);
1 efrain 515
 
261 efrain 516
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
517
            $externalCredentials->getUserBy($currentUser->id);
518
 
519
            $host       = trim($this->config['leaderslinked.inmail.host']);
520
            $port       = intval($this->config['leaderslinked.inmail.port_imap'], 10);
521
            $mailbox    = trim($this->config['leaderslinked.inmail.mailbox']);
522
 
523
 
524
            $username   = $externalCredentials->getUsernameInmail();
525
            $password   =  $externalCredentials->getPasswordInmail();
526
 
527
 
528
 
529
 
530
            try {
531
                \Eden\Core\Control::i();
532
                $client = eden('mail')->imap(
533
                    $host,
534
                    $username,
535
                    $password,
536
                    $port,
537
                    false);
538
 
539
                $client->setActiveMailbox($mailbox);
540
 
541
                $email = $client->getUniqueEmails($id, true);
542
                $client->disconnect();
543
 
544
                if($email['uid']) {
545
                    $from = $email['from']['email'];
546
                    $subject = $email['subject'];
547
                    $body   = empty($email['body']['text/html']) ?  $email['body']['text/plain'] : $email['body']['text/html'];
548
 
549
 
550
                    $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
551
                    $user = $userMapper->fetchOneByUsernameInmailAndNetworkId($from, $currentUser->network_id);
552
 
553
 
554
                    $seen = false;
555
                    if(is_array($email['flags'])) {
556
                        foreach($email['flags'] as $flag)
557
                        {
558
                            if($flag == 'seen') {
559
                                $seen = 1;
560
                                break;
1 efrain 561
                            }
562
                        }
563
                    }
261 efrain 564
 
294 www 565
                    $extensions = ['mov', 'webm','mp4','mpeg','jpg','jpeg','png', 'pdf'];
566
                    $contentTypes =  ['video/quicktime', 'video/webm', 'video/mp4', 'video/mpeg', 'image/jpg', 'image/jpeg', 'image/png', 'application/pdf'];
261 efrain 567
 
568
 
294 www 569
 
570
 
261 efrain 571
                    $attachments = [];
572
                    if(!empty($email['attachment']) &&  is_array($email['attachment'])) {
573
                        foreach($email['attachment'] as $filename => $attachment)
574
                        {
575
                            $i = 0;
576
                            foreach($attachment as $contentType => $value)
577
                            {
294 www 578
                                $pos = strrpos($filename, '.');
579
                                $extension = trim(substr($filename, $pos + 1));
580
 
581
                               for($j = 0; $max = count($extensions), $j < $max; $j++)
582
                               {
583
                                   if($extension == $extensions[$j]) {
584
                                       $contentType = $contentTypes[$j];
585
                                   }
586
                               }
587
 
588
 
589
 
590
 
261 efrain 591
                                array_push($attachments, [
592
                                    'filename' => $filename,
593
                                    'content-type' => $contentType,
594
                                    'attachment_link' =>  $this->url()->fromRoute('inmail/message/attachment',[ 'id' => $email['uid'], 'attachment' => $i ], ['force_canonical' => true]),
595
                                ]);
596
                                $i++;
1 efrain 597
                            }
598
                        }
599
                    }
261 efrain 600
 
1 efrain 601
                    return new JsonModel([
261 efrain 602
                        'success' => true,
603
                        'data' => [
604
                            'uuid' => $user->uuid,
605
                            'name' => $user->first_name . ' ' . $user->last_name,
283 www 606
                            'image' => $storage->getUserImage($user),
261 efrain 607
                            'subject' => $subject,
608
                            'body' => $body,
609
                            'date' => date('Y-m-d h:i a', $email['date']),
610
                            'seen' => $seen,
611
                            'block_link' => $this->url()->fromRoute('inmail/user/block',[ 'id' => $user->uuid ], ['force_canonical' => true]),
612
                            'send_link' => $this->url()->fromRoute('inmail/message/send',[ 'id' => $user->uuid ], ['force_canonical' => true]),
613
                            'delete_link'=>    $this->url()->fromRoute('inmail/message/delete',[ 'id' => $email['uid'] ], ['force_canonical' => true]),
614
                            'attachments' => $attachments,
1 efrain 615
                        ]
616
                    ]);
261 efrain 617
 
618
 
1 efrain 619
                } else {
620
                    return new JsonModel([
261 efrain 621
                        'success' => false,
622
                        'data' => 'ERROR_INMAIL_MESSAGE_NOT_FOUND'
1 efrain 623
                    ]);
624
                }
261 efrain 625
 
626
 
627
            } catch (\Exception $e) {
628
 
1 efrain 629
                return new JsonModel([
261 efrain 630
                    'success' => false,
631
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
1 efrain 632
                ]);
633
            }
261 efrain 634
 
635
 
636
 
1 efrain 637
        } else {
638
            return new JsonModel([
639
                'success' => false,
640
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
641
            ]);
642
        }
643
    }
261 efrain 644
 
645
 
646
    public function deleteMessageAction()
1 efrain 647
    {
261 efrain 648
        $request = $this->getRequest();
649
        if ($request->isPost()) {
650
            $currentUserPlugin = $this->plugin('currentUserPlugin');
651
            $currentUser = $currentUserPlugin->getUser();
652
 
653
            $id = intval($this->params()->fromRoute('id'), 10);
268 efrain 654
 
261 efrain 655
 
656
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
657
            $externalCredentials->getUserBy($currentUser->id);
658
 
659
            $host       = trim($this->config['leaderslinked.inmail.host']);
660
            $port       = intval($this->config['leaderslinked.inmail.port_imap'], 10);
661
            $mailbox    = trim($this->config['leaderslinked.inmail.mailbox']);
662
 
663
 
664
            $username   = $externalCredentials->getUsernameInmail();
665
            $password   =  $externalCredentials->getPasswordInmail();
666
 
667
 
668
 
669
 
670
            try {
671
                \Eden\Core\Control::i();
672
                $client = eden('mail')->imap(
673
                    $host,
674
                    $username,
675
                    $password,
676
                    $port,
677
                    false);
678
 
679
                $client->setActiveMailbox($mailbox);
680
 
681
                $response = $client->remove($id, true);
682
                $client->disconnect();
683
 
684
                if($response) {
685
                    return new JsonModel([
686
                        'success' => true,
687
                        'data' => 'LABEL_INMAIL_MESSAGE_DELETED'
688
                    ]);
689
                } else {
690
                    return new JsonModel([
691
                        'success' => false,
692
                        'data' =>  'ERROR_INMAIL_MESSAGE_NOT_DELETE'
693
                    ]);
694
                }
695
 
696
 
697
            } catch (\Exception $e) {
698
 
699
                return new JsonModel([
700
                    'success' => false,
701
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
702
                ]);
703
            }
704
 
705
 
706
 
1 efrain 707
        } else {
261 efrain 708
            return new JsonModel([
709
                'success' => false,
710
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
711
            ]);
1 efrain 712
        }
713
    }
261 efrain 714
 
715
 
716
    public function sendMessageAction()
1 efrain 717
    {
718
        $request = $this->getRequest();
719
        if ($request->isPost()) {
720
            $currentUserPlugin = $this->plugin('currentUserPlugin');
721
            $currentUser = $currentUserPlugin->getUser();
722
 
261 efrain 723
            $userMapper = UserMapper::getInstance($this->adapter);
724
 
1 efrain 725
            $id = $this->params()->fromRoute('id');
726
            if (!$id) {
727
                return new JsonModel([
728
                    'success' => false,
729
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
730
                ]);
731
            }
732
 
261 efrain 733
 
734
            $user = $userMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 efrain 735
            if (!$user) {
736
                return new JsonModel([
737
                    'success' => false,
738
                    'data' => 'ERROR_REQUEST_IS_INVALID'
739
                ]);
740
            }
741
 
261 efrain 742
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
743
            $externalCredentials->getUserBy($currentUser->id);
1 efrain 744
 
261 efrain 745
            $host       = trim($this->config['leaderslinked.inmail.host']);
746
            $port       = intval($this->config['leaderslinked.inmail.port_smtp'], 10);
747
 
1 efrain 748
 
261 efrain 749
            $username   = $externalCredentials->getUsernameInmail();
750
            $password   =  $externalCredentials->getPasswordInmail();
751
 
752
 
753
 
754
            $data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
755
 
756
 
757
            $form = new SendForm();
758
            $form->setData($data);
759
 
760
            if ($form->isValid()) {
1 efrain 761
 
261 efrain 762
                $dataPost = (array) $form->getData();
763
 
764
                try {
291 www 765
 
766
                    $subject = $dataPost['subject'];
767
                    $message = $dataPost['body'];
768
 
769
                    $encoding = mb_detect_encoding($subject);
770
                    if($encoding != 'UTF-8') {
771
                        $subject = mb_convert_encoding($subject, 'UTF-8', $encoding);
772
                    }
773
 
774
                    $encoding = mb_detect_encoding($message);
775
                    if($encoding != 'UTF-8') {
776
                        $message = mb_convert_encoding($message, 'UTF-8', $encoding);
777
                    }
778
 
779
 
780
 
781
 
782
 
783
 
784
                    $phpMailer = new PHPMailer();
785
                    $phpMailer->isSMTP();
786
 
787
                    $phpMailer->addAddress($user->username_inmail, ($user->first_name . ' ' . $user->last_name));
788
                   /*
789
                    if($cc) {
790
                        foreach($cc as $address => $name) {
791
                            $phpMailer->addCC($address, $name);
792
                        }
793
                    }
794
                    if($bcc) {
795
                        foreach($bcc as $address => $name) {
796
                            $phpMailer->addBCC($address, $name);
797
                        }
798
                    }*/
799
 
800
                    $phpMailer->setFrom($currentUser->username_inmail, ($currentUser->first_name . ' ' . $currentUser->last_name));
293 www 801
                    $phpMailer->SMTPDebug    = false;
291 www 802
                    $phpMailer->Host         = $host;
803
                    $phpMailer->Port         = $port;
804
                    $phpMailer->IsHTML(true);
805
                    $phpMailer->SMTPAuth    = true;
806
                    //$phpMailer->SMTPSecure   = 'tls';
293 www 807
                    $phpMailer->SMTPAutoTLS = false;
808
                    $phpMailer->SMTPSecure = ''; // PHPMailer::ENCRYPTION_SMTPS;
291 www 809
                    $phpMailer->Username     = $username;
810
                    $phpMailer->Password     = $password;
811
                    $phpMailer->Subject      = $subject;
812
                    $phpMailer->Body         = $message;
813
                    $phpMailer->AltBody      = $message;
814
                    $phpMailer->CharSet      = 'UTF-8';
815
 
816
                    $files  = $this->getRequest()->getFiles()->toArray();
817
                    if (isset($files['filename']) && empty($files['filename']['error'])) {
818
                        $phpMailer->addAttachment($files['filename']['tmp_name'], $files['filename']['name'] );
819
 
820
                    }
821
 
822
                    if($phpMailer->send()) {
823
 
824
                        return new JsonModel([
825
                            'success'   => true,
826
                            'data'   => 'LABEL_INMAIL_MESSAGE_SENT'
827
                        ]);
828
                    } else {
829
                        return new JsonModel([
830
                            'success'   => false,
831
                            'data'   => 'ERROR_INMAIL_MESSAGE_NOT_SENT'
832
                        ]);
292 www 833
                    }
291 www 834
 
835
 
836
                    /*
837
 
261 efrain 838
                    \Eden\Core\Control::i();
839
                    $smtp = eden('mail')->smtp(
840
                        $host,
841
                        $username,
842
                        $password,
843
                        $port,
844
                        false
845
                    );
846
 
847
                    $smtp->setSubject( $dataPost['subject']);
848
                    $smtp->setBody( $dataPost['body'], true);
849
                    $smtp->setBody($dataPost['body']);
850
                    $smtp->addTo($user->username_inmail);
851
 
852
                    $files  = $this->getRequest()->getFiles()->toArray();
283 www 853
                    if (isset($files['filename']) && empty($files['filename']['error'])) {
854
                        $smtp->addAttachment($files['filename']['name'], $files['filename']['tmp_name']);
1 efrain 855
 
856
                    }
261 efrain 857
 
858
 
859
 
860
                    $smtp->send();
861
 
291 www 862
                    $smtp->disconnect(); */
261 efrain 863
 
864
                    return new JsonModel([
865
                        'success'   => true,
866
                        'data'   => 'LABEL_INMAIL_MESSAGE_SENT'
867
                    ]);
868
 
869
                } catch (\Exception $e) {
870
                    return new JsonModel([
871
                        'success'   => false,
872
                        'data'   => 'ERROR_INMAIL_MESSAGE_NOT_SENT'
873
                    ]);
1 efrain 874
                }
875
 
261 efrain 876
 
1 efrain 877
            } else {
261 efrain 878
 
879
 
880
                $messages = [];
881
                $form_messages = (array) $form->getMessages();
882
                foreach ($form_messages  as $fieldname => $field_messages) {
883
                    $messages[$fieldname] = array_values($field_messages);
884
                }
885
 
886
                return new JsonModel([
887
                    'success'   => false,
888
                    'data'   => $messages
889
                ]);
1 efrain 890
            }
891
        } else {
261 efrain 892
            return new JsonModel([
1 efrain 893
                'success' => false,
894
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
261 efrain 895
            ]);
1 efrain 896
        }
897
    }
261 efrain 898
 
899
 
1 efrain 900
}
261 efrain 901