Proyectos de Subversion LeadersLinked - Services

Rev

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