Proyectos de Subversion LeadersLinked - Services

Rev

Rev 289 | Rev 292 | 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
 
565
 
566
 
567
                    $attachments = [];
568
                    if(!empty($email['attachment']) &&  is_array($email['attachment'])) {
569
                        foreach($email['attachment'] as $filename => $attachment)
570
                        {
571
                            $i = 0;
572
                            foreach($attachment as $contentType => $value)
573
                            {
574
                                array_push($attachments, [
575
                                    'filename' => $filename,
576
                                    'content-type' => $contentType,
577
                                    'attachment_link' =>  $this->url()->fromRoute('inmail/message/attachment',[ 'id' => $email['uid'], 'attachment' => $i ], ['force_canonical' => true]),
578
                                ]);
579
                                $i++;
1 efrain 580
                            }
581
                        }
582
                    }
261 efrain 583
 
1 efrain 584
                    return new JsonModel([
261 efrain 585
                        'success' => true,
586
                        'data' => [
587
                            'uuid' => $user->uuid,
588
                            'name' => $user->first_name . ' ' . $user->last_name,
283 www 589
                            'image' => $storage->getUserImage($user),
261 efrain 590
                            'subject' => $subject,
591
                            'body' => $body,
592
                            'date' => date('Y-m-d h:i a', $email['date']),
593
                            'seen' => $seen,
594
                            'block_link' => $this->url()->fromRoute('inmail/user/block',[ 'id' => $user->uuid ], ['force_canonical' => true]),
595
                            'send_link' => $this->url()->fromRoute('inmail/message/send',[ 'id' => $user->uuid ], ['force_canonical' => true]),
596
                            'delete_link'=>    $this->url()->fromRoute('inmail/message/delete',[ 'id' => $email['uid'] ], ['force_canonical' => true]),
597
                            'attachments' => $attachments,
1 efrain 598
                        ]
599
                    ]);
261 efrain 600
 
601
 
1 efrain 602
                } else {
603
                    return new JsonModel([
261 efrain 604
                        'success' => false,
605
                        'data' => 'ERROR_INMAIL_MESSAGE_NOT_FOUND'
1 efrain 606
                    ]);
607
                }
261 efrain 608
 
609
 
610
            } catch (\Exception $e) {
611
 
1 efrain 612
                return new JsonModel([
261 efrain 613
                    'success' => false,
614
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
1 efrain 615
                ]);
616
            }
261 efrain 617
 
618
 
619
 
1 efrain 620
        } else {
621
            return new JsonModel([
622
                'success' => false,
623
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
624
            ]);
625
        }
626
    }
261 efrain 627
 
628
 
629
    public function deleteMessageAction()
1 efrain 630
    {
261 efrain 631
        $request = $this->getRequest();
632
        if ($request->isPost()) {
633
            $currentUserPlugin = $this->plugin('currentUserPlugin');
634
            $currentUser = $currentUserPlugin->getUser();
635
 
636
            $id = intval($this->params()->fromRoute('id'), 10);
268 efrain 637
 
261 efrain 638
 
639
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
640
            $externalCredentials->getUserBy($currentUser->id);
641
 
642
            $host       = trim($this->config['leaderslinked.inmail.host']);
643
            $port       = intval($this->config['leaderslinked.inmail.port_imap'], 10);
644
            $mailbox    = trim($this->config['leaderslinked.inmail.mailbox']);
645
 
646
 
647
            $username   = $externalCredentials->getUsernameInmail();
648
            $password   =  $externalCredentials->getPasswordInmail();
649
 
650
 
651
 
652
 
653
            try {
654
                \Eden\Core\Control::i();
655
                $client = eden('mail')->imap(
656
                    $host,
657
                    $username,
658
                    $password,
659
                    $port,
660
                    false);
661
 
662
                $client->setActiveMailbox($mailbox);
663
 
664
                $response = $client->remove($id, true);
665
                $client->disconnect();
666
 
667
                if($response) {
668
                    return new JsonModel([
669
                        'success' => true,
670
                        'data' => 'LABEL_INMAIL_MESSAGE_DELETED'
671
                    ]);
672
                } else {
673
                    return new JsonModel([
674
                        'success' => false,
675
                        'data' =>  'ERROR_INMAIL_MESSAGE_NOT_DELETE'
676
                    ]);
677
                }
678
 
679
 
680
            } catch (\Exception $e) {
681
 
682
                return new JsonModel([
683
                    'success' => false,
684
                    'data' => 'ERROR_INMAIL_MESSAGE_LIST_UNAVAILABLE'
685
                ]);
686
            }
687
 
688
 
689
 
1 efrain 690
        } else {
261 efrain 691
            return new JsonModel([
692
                'success' => false,
693
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
694
            ]);
1 efrain 695
        }
696
    }
261 efrain 697
 
698
 
699
    public function sendMessageAction()
1 efrain 700
    {
701
        $request = $this->getRequest();
702
        if ($request->isPost()) {
703
            $currentUserPlugin = $this->plugin('currentUserPlugin');
704
            $currentUser = $currentUserPlugin->getUser();
705
 
261 efrain 706
            $userMapper = UserMapper::getInstance($this->adapter);
707
 
1 efrain 708
            $id = $this->params()->fromRoute('id');
709
            if (!$id) {
710
                return new JsonModel([
711
                    'success' => false,
712
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
713
                ]);
714
            }
715
 
261 efrain 716
 
717
            $user = $userMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 efrain 718
            if (!$user) {
719
                return new JsonModel([
720
                    'success' => false,
721
                    'data' => 'ERROR_REQUEST_IS_INVALID'
722
                ]);
723
            }
724
 
261 efrain 725
            $externalCredentials = ExternalCredentials::getInstancia($this->config, $this->adapter);
726
            $externalCredentials->getUserBy($currentUser->id);
1 efrain 727
 
261 efrain 728
            $host       = trim($this->config['leaderslinked.inmail.host']);
729
            $port       = intval($this->config['leaderslinked.inmail.port_smtp'], 10);
730
 
1 efrain 731
 
261 efrain 732
            $username   = $externalCredentials->getUsernameInmail();
733
            $password   =  $externalCredentials->getPasswordInmail();
734
 
735
 
736
 
737
            $data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
738
 
739
 
740
            $form = new SendForm();
741
            $form->setData($data);
742
 
743
            if ($form->isValid()) {
1 efrain 744
 
261 efrain 745
                $dataPost = (array) $form->getData();
746
 
747
                try {
291 www 748
 
749
                    $subject = $dataPost['subject'];
750
                    $message = $dataPost['body'];
751
 
752
                    $encoding = mb_detect_encoding($subject);
753
                    if($encoding != 'UTF-8') {
754
                        $subject = mb_convert_encoding($subject, 'UTF-8', $encoding);
755
                    }
756
 
757
                    $encoding = mb_detect_encoding($message);
758
                    if($encoding != 'UTF-8') {
759
                        $message = mb_convert_encoding($message, 'UTF-8', $encoding);
760
                    }
761
 
762
 
763
 
764
 
765
 
766
 
767
                    $phpMailer = new PHPMailer();
768
                    $phpMailer->isSMTP();
769
 
770
                    $phpMailer->addAddress($user->username_inmail, ($user->first_name . ' ' . $user->last_name));
771
                   /*
772
                    if($cc) {
773
                        foreach($cc as $address => $name) {
774
                            $phpMailer->addCC($address, $name);
775
                        }
776
                    }
777
                    if($bcc) {
778
                        foreach($bcc as $address => $name) {
779
                            $phpMailer->addBCC($address, $name);
780
                        }
781
                    }*/
782
 
783
                    $phpMailer->setFrom($currentUser->username_inmail, ($currentUser->first_name . ' ' . $currentUser->last_name));
784
                    $phpMailer->SMTPDebug    = true;
785
                    $phpMailer->Host         = $host;
786
                    $phpMailer->Port         = $port;
787
                    $phpMailer->IsHTML(true);
788
                    $phpMailer->SMTPAuth    = true;
789
                    //$phpMailer->SMTPSecure   = 'tls';
790
                    $phpMailer->SMTPAuth     = false;
791
                    $phpMailer->Username     = $username;
792
                    $phpMailer->Password     = $password;
793
                    $phpMailer->Subject      = $subject;
794
                    $phpMailer->Body         = $message;
795
                    $phpMailer->AltBody      = $message;
796
                    $phpMailer->CharSet      = 'UTF-8';
797
 
798
                    $files  = $this->getRequest()->getFiles()->toArray();
799
                    if (isset($files['filename']) && empty($files['filename']['error'])) {
800
                        $phpMailer->addAttachment($files['filename']['tmp_name'], $files['filename']['name'] );
801
 
802
                    }
803
 
804
                    if($phpMailer->send()) {
805
 
806
                        return new JsonModel([
807
                            'success'   => true,
808
                            'data'   => 'LABEL_INMAIL_MESSAGE_SENT'
809
                        ]);
810
                    } else {
811
                        return new JsonModel([
812
                            'success'   => false,
813
                            'data'   => 'ERROR_INMAIL_MESSAGE_NOT_SENT'
814
                        ]);
815
                    }*/
816
 
817
 
818
                    /*
819
 
261 efrain 820
                    \Eden\Core\Control::i();
821
                    $smtp = eden('mail')->smtp(
822
                        $host,
823
                        $username,
824
                        $password,
825
                        $port,
826
                        false
827
                    );
828
 
829
                    $smtp->setSubject( $dataPost['subject']);
830
                    $smtp->setBody( $dataPost['body'], true);
831
                    $smtp->setBody($dataPost['body']);
832
                    $smtp->addTo($user->username_inmail);
833
 
834
                    $files  = $this->getRequest()->getFiles()->toArray();
283 www 835
                    if (isset($files['filename']) && empty($files['filename']['error'])) {
836
                        $smtp->addAttachment($files['filename']['name'], $files['filename']['tmp_name']);
1 efrain 837
 
838
                    }
261 efrain 839
 
840
 
841
 
842
                    $smtp->send();
843
 
291 www 844
                    $smtp->disconnect(); */
261 efrain 845
 
846
                    return new JsonModel([
847
                        'success'   => true,
848
                        'data'   => 'LABEL_INMAIL_MESSAGE_SENT'
849
                    ]);
850
 
851
                } catch (\Exception $e) {
852
                    return new JsonModel([
853
                        'success'   => false,
854
                        'data'   => 'ERROR_INMAIL_MESSAGE_NOT_SENT'
855
                    ]);
1 efrain 856
                }
857
 
261 efrain 858
 
1 efrain 859
            } else {
261 efrain 860
 
861
 
862
                $messages = [];
863
                $form_messages = (array) $form->getMessages();
864
                foreach ($form_messages  as $fieldname => $field_messages) {
865
                    $messages[$fieldname] = array_values($field_messages);
866
                }
867
 
868
                return new JsonModel([
869
                    'success'   => false,
870
                    'data'   => $messages
871
                ]);
1 efrain 872
            }
873
        } else {
261 efrain 874
            return new JsonModel([
1 efrain 875
                'success' => false,
876
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
261 efrain 877
            ]);
1 efrain 878
        }
879
    }
261 efrain 880
 
881
 
1 efrain 882
}
261 efrain 883