Proyectos de Subversion LeadersLinked - Services

Rev

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