Proyectos de Subversion LeadersLinked - Services

Rev

Rev 791 | 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
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\Mvc\Controller\AbstractActionController;
8
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Mapper\UserMapper;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\UserPasswordMapper;
15
use LeadersLinked\Form\AccountSetting\NotificationSettingForm;
16
use LeadersLinked\Mapper\UserNotificationSettingMapper;
17
use LeadersLinked\Form\AccountSetting\ChangePasswordForm;
18
use LeadersLinked\Form\AccountSetting\ChangeImageForm;
19
use LeadersLinked\Library\Image;
20
use LeadersLinked\Form\AccountSetting\LocationForm;
21
use LeadersLinked\Model\Location;
22
use LeadersLinked\Mapper\LocationMapper;
23
use LeadersLinked\Form\AccountSetting\PrivacySettingForm;
24
use LeadersLinked\Mapper\UserProfileMapper;
25
use LeadersLinked\Form\AccountSetting\BasicForm;
26
use LeadersLinked\Form\Transaction\FundsAddForm;
27
use LeadersLinked\Mapper\UserBrowserMapper;
28
use LeadersLinked\Mapper\QueryMapper;
29
use LeadersLinked\Mapper\DeviceHistoryMapper;
30
use LeadersLinked\Mapper\DeviceMapper;
31
use Laminas\Hydrator\ArraySerializableHydrator;
32
use Laminas\Db\ResultSet\HydratingResultSet;
33
use Laminas\Paginator\Adapter\DbSelect;
34
use Laminas\Paginator\Paginator;
35
use LeadersLinked\Mapper\UserIpMapper;
36
use LeadersLinked\Model\Transaction;
37
use LeadersLinked\Model\Provider;
38
use LeadersLinked\Mapper\TransactionMapper;
39
use LeadersLinked\Mapper\UserProviderMapper;
40
use LeadersLinked\Model\UserProvider;
41
use LeadersLinked\Model\UserPassword;
42
use LeadersLinked\Model\UserDeleted;
43
use LeadersLinked\Mapper\UserDeletedMapper;
44
use LeadersLinked\Model\UserType;
45
use LeadersLinked\Model\User;
46
use LeadersLinked\Library\QueueEmail;
47
use LeadersLinked\Mapper\EmailTemplateMapper;
48
use LeadersLinked\Model\EmailTemplate;
49
use LeadersLinked\Cache\CacheInterface;
50
use PayPalHttp\HttpException;
51
use PayPalCheckoutSdk\Core\SandboxEnvironment;
52
use PayPalCheckoutSdk\Core\ProductionEnvironment;
53
use PayPalCheckoutSdk\Core\PayPalHttpClient;
54
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
55
use Laminas\Mvc\I18n\Translator;
283 www 56
use LeadersLinked\Library\Storage;
1 efrain 57
 
58
 
59
class AccountSettingController extends AbstractActionController
60
{
61
    /**
62
     *
63
     * @var \Laminas\Db\Adapter\AdapterInterface
64
     */
65
    private $adapter;
66
 
67
    /**
68
     *
69
     * @var \LeadersLinked\Cache\CacheInterface
70
     */
71
    private $cache;
72
 
73
 
74
    /**
75
     *
76
     * @var \Laminas\Log\LoggerInterface
77
     */
78
    private $logger;
79
 
80
    /**
81
     *
82
     * @var array
83
     */
84
    private $config;
85
 
86
 
87
    /**
88
     *
89
     * @var \Laminas\Mvc\I18n\Translator
90
     */
91
    private $translator;
92
 
93
 
94
    /**
95
     *
96
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
97
     * @param \LeadersLinked\Cache\CacheInterface $cache
98
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
99
     * @param array $config
100
     * @param \Laminas\Mvc\I18n\Translator $translator
101
     */
102
    public function __construct($adapter, $cache, $logger, $config, $translator)
103
    {
104
        $this->adapter      = $adapter;
105
        $this->cache        = $cache;
106
        $this->logger       = $logger;
107
        $this->config       = $config;
108
        $this->translator   = $translator;
109
    }
110
 
111
    public function indexAction()
112
    {
113
        $request = $this->getRequest();
114
        if($request->isGet()) {
115
 
116
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
117
            $currentNetwork = $currentNetworkPlugin->getNetwork();
118
 
119
 
120
            $tab =  Functions::sanitizeFilterString($this->params()->fromQuery('tab'));
121
            if(!in_array($tab, ['nav-basic', 'nav-notification', 'nav-password', 'nav-image', 'nav-location', 'nav-privacy', 'nav-ips', 'nav-browsers', 'nav-transactions', 'nav-social-networks'])) {
122
                $tab = 'nav-basic';
123
            }
124
 
125
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
126
            if($sandbox) {
127
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
128
            } else {
129
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
130
            }
131
 
132
            $currentUserPlugin = $this->plugin('currentUserPlugin');
133
            $currentUser = $currentUserPlugin->getUser();
134
 
135
            $userUserNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);
136
            $userUserNotificationSetting = $userUserNotificationSettingMapper->fetchOne($currentUser->id);
137
 
138
 
139
 
140
            if($currentUser->location_id) {
141
 
142
                $locationMapper = LocationMapper::getInstance($this->adapter);
143
                $location = $locationMapper->fetchOne($currentUser->location_id);
144
                if($location) {
145
                    $location_formatted_address = $location->formatted_address;
141 efrain 146
 
147
                    $formLocation = new LocationForm();
1 efrain 148
                    $formLocation->setData((array) $location);
149
                }
150
            } else {
151
                $location_formatted_address = '';
152
            }
153
 
154
            $facebook    = 0;
155
            $twitter     = 0;
156
            $google      = 0;
157
 
158
 
159
            $userProviderMapper = UserProviderMapper::getInstance($this->adapter);
160
            $userProviders = $userProviderMapper->fetchAllByUserId($currentUser->id);
161
            foreach($userProviders as $userProvider)
162
            {
163
                switch($userProvider->provider)
164
                {
165
                    case  UserProvider::PROVIDER_FACEBOOK :
166
                        $facebook  = 1;
167
                        break;
168
 
169
                    case  UserProvider::PROVIDER_TWITTER :
170
                        $twitter = 1;
171
                        break;
172
 
173
                    case  UserProvider::PROVIDER_GOOGLE :
174
                        $google  = 1;
175
                        break;
176
 
177
                }
178
            }
179
 
333 www 180
            $storage = Storage::getInstance($this->config, $this->adapter);
283 www 181
            $image =  $storage->getUserImage($currentUser);
182
 
1 efrain 183
            return new JsonModel([
184
                'tab' => $tab,
185
                'balance' => number_format(floatval($currentUser->balance), 2),
186
                'amounts' => [
187
                    '5' => '5 LABEL_USD',
188
                    '10' => '10 LABEL_USD',
189
                    '15' => '15 LABEL_USD',
190
                    '20' => '20 LABEL_USD',
191
                    '25' => '25 LABEL_USD',
192
                    '50' => '50 LABEL_USD',
193
                    '75' => '75 LABEL_USD',
194
                    '100' => '100 LABEL_USD',
195
                ],
196
                'usertype_id' => $currentUser->usertype_id,
283 www 197
                'image' => $image,
142 efrain 198
                //'config' => $this->config,
1 efrain 199
                'google_map_key' => $google_map_key,
200
                'location_formatted_address' => $location_formatted_address,
201
                'google' => $google,
202
                'facebook' => $facebook,
203
                'twitter' => $twitter,
204
                'defaultNetwork' => $currentNetwork->default,
205
                'show_in_search' => $currentUser->show_in_search,
206
                'user_notifications' => [
207
                    'receive_connection_request' => $userUserNotificationSetting->receive_connection_request,
208
                    'accept_my_request_connection' => $userUserNotificationSetting->accept_my_request_connection,
209
                    'receive_invitation_group' => $userUserNotificationSetting->receive_invitation_group,
210
                    'accept_my_request_join_group' => $userUserNotificationSetting->accept_my_request_join_group,
211
                    'receive_request_join_my_group' => $userUserNotificationSetting->receive_request_join_my_group,
212
                    'receive_invitation_company' => $userUserNotificationSetting->receive_invitation_company,
213
                    'like_my_feed' => $userUserNotificationSetting->like_my_feed,
214
                    'comment_my_feed' => $userUserNotificationSetting->comment_my_feed,
215
                    'share_my_feed' => $userUserNotificationSetting->share_my_feed,
216
                    'receive_inmail' => $userUserNotificationSetting->receive_inmail,
217
                    'receive_invitation_meeting' => $userUserNotificationSetting->receive_invitation_meeting,
218
                    'receive_reminder_meeting' => $userUserNotificationSetting->receive_reminder_meeting,
219
                    'receive_records_available_meeting' => $userUserNotificationSetting->receive_records_available_meeting,
220
                ]
221
 
222
            ]);
223
 
224
 
225
        } else {
226
            return new JsonModel([
227
                'success' => false,
228
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
229
            ]);
230
        }
231
    }
232
 
233
    public function notificationAction()
234
    {
235
        $request = $this->getRequest();
236
 
237
        if($request->isGet()) {
238
            $hydrator = new ObjectPropertyHydrator();
239
 
240
            $currentUserPlugin = $this->plugin('currentUserPlugin');
241
            $currentUser = $currentUserPlugin->getUser();
242
 
243
            $userUserNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);
244
            $userUserNotificationSetting = $userUserNotificationSettingMapper->fetchOne($currentUser->id);
245
 
246
 
247
            return new JsonModel([
248
               'success' => true,
249
               'data' => [
250
                   'receive_connection_request' => $userUserNotificationSetting->receive_connection_request ? 1 : 0,
251
                   'accept_my_request_connection' => $userUserNotificationSetting->accept_my_request_connection ? 1 : 0,
252
 
253
                   'receive_invitation_group' => $userUserNotificationSetting->receive_invitation_group ? 1 : 0,
254
                   'accept_my_request_join_group' => $userUserNotificationSetting->accept_my_request_join_group ? 1 : 0,
255
                   'receive_request_join_my_group' => $userUserNotificationSetting->receive_request_join_my_group ? 1 : 0,
256
 
257
 
258
                   'receive_invitation_company' => $userUserNotificationSetting->receive_invitation_company ? 1 : 0,
259
 
260
                   'like_my_feed' => $userUserNotificationSetting->like_my_feed ? 1 : 0,
261
                   'comment_my_feed' => $userUserNotificationSetting->comment_my_feed ? 1 : 0,
262
                   'share_my_feed' => $userUserNotificationSetting->share_my_feed ? 1 : 0,
263
                   'receive_inmail' => $userUserNotificationSetting->receive_inmail ? 1 : 0,
264
 
265
                   'receive_invitation_meeting' => $userUserNotificationSetting->receive_invitation_meeting ? 1 : 0,
266
                   'receive_reminder_meeting' => $userUserNotificationSetting->receive_reminder_meeting ? 1 : 0,
267
                   'receive_records_available_meeting' => $userUserNotificationSetting->receive_records_available_meeting ? 1 : 0,
268
 
269
               ]
270
            ]);
271
 
272
 
273
        } else  if($request->isPost()) {
274
 
275
            $dataPost = $request->getPost()->toArray();
276
            $form = new NotificationSettingForm();
277
            $form->setData($dataPost);
278
 
279
            if($form->isValid()) {
280
                $currentUserPlugin = $this->plugin('currentUserPlugin');
281
                $currentUser = $currentUserPlugin->getUser();
282
 
283
                $dataPost = (array) $form->getData();
284
                $hydrator = new ObjectPropertyHydrator();
285
 
286
                $userUserNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);
287
                $userUserNotificationSetting = $userUserNotificationSettingMapper->fetchOne($currentUser->id);
288
                $hydrator->hydrate($dataPost, $userUserNotificationSetting);
289
 
290
                if($userUserNotificationSettingMapper->update($userUserNotificationSetting)) {
291
                    $this->logger->info('Se guardo las preferencias de notificación', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
292
                    $data = [
293
                        'success'   => true,
294
                        'data'      => 'LABEL_NOTIFICATION_SETTINGS_UPDATE'
295
                    ];
296
                } else {
297
                    $data = [
298
                        'success'   => false,
299
                        'data'   => 'ERROR_UNKNOWN'
300
                    ];
301
                }
302
 
303
                return new JsonModel($data);
304
 
305
            } else {
306
                $messages = [];
307
 
308
 
309
 
310
                $form_messages = (array) $form->getMessages();
311
                foreach($form_messages  as $fieldname => $field_messages)
312
                {
313
 
314
                    $messages[$fieldname] = array_values($field_messages);
315
                }
316
 
317
                return new JsonModel([
318
                    'success'   => false,
319
                    'data'   => $messages
320
                ]);
321
            }
322
        }  else {
323
            $data = [
324
                'success' => false,
325
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
326
            ];
327
 
328
            return new JsonModel($data);
329
        }
330
 
331
        return new JsonModel($data);
332
 
333
    }
334
 
335
 
336
 
337
 
338
 
339
    public function passwordAction()
340
    {
341
        $request = $this->getRequest();
342
        if($request->isPost()) {
343
            $dataPost = $request->getPost()->toArray();
344
            $form = new ChangePasswordForm();
345
            $form->setData($dataPost);
346
 
347
            if($form->isValid()) {
348
                $data = (array) $form->getData();
349
                $password = $data['password'];
350
 
351
                $currentUserPlugin = $this->plugin('currentUserPlugin');
352
                $currentUser = $currentUserPlugin->getUser();
353
 
354
 
355
                $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
356
                $userPasswords = $userPasswordMapper->fetchAllByUserId($currentUser->id);
357
 
358
                $oldPassword = false;
359
                foreach($userPasswords as $userPassword)
360
                {
361
                    if(password_verify($password, $userPassword->password) || (md5($password) == $userPassword->password))
362
                    {
363
                        $oldPassword = true;
364
                        break;
365
                    }
366
                }
367
 
368
                if($oldPassword) {
369
                    $this->logger->err('Cambio de contraseña del usuario - error contraseña ya utilizada anteriormente', ['user_id' =>  $currentUser->id, 'ip' => Functions::getUserIP()]);
370
 
371
                    return new JsonModel([
372
                        'success'   => false,
373
                        'data'      => 'ERROR_PASSWORD_HAS_ALREADY_BEEN_USED'
374
 
375
                    ]);
376
                } else {
377
                    $password_hash = password_hash($password, PASSWORD_DEFAULT);
378
 
379
                    $userMapper = UserMapper::getInstance($this->adapter);
380
                    $result = $userMapper->updatePassword($currentUser, $password_hash);
381
                    if($result) {
382
 
383
                        $userPassword = new UserPassword();
384
                        $userPassword->user_id = $currentUser->id;
385
                        $userPassword->password = $password_hash;
386
                        $userPasswordMapper->insert($userPassword);
387
 
388
                        $this->logger->info('Cambio de contraseña del usuario realizado', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
389
 
390
 
391
                        return new JsonModel([
392
                            'success'   => true,
393
                            'data'      => 'LABEL_YOUR_PASSWORD_HAS_BEEN_UPDATED'
394
 
395
                        ]);
396
                    } else {
397
                        $this->logger->err('Cambio de contraseña del usuario - error desconocido', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
398
 
399
                        return new JsonModel([
400
                            'success'   => true,
401
                            'data'      => 'ERROR_THERE_WAS_AN_ERROR'
402
 
403
                        ]);
404
                    }
405
                }
406
 
407
            } else {
408
                $messages = [];
409
 
410
                $form_messages = (array) $form->getMessages();
411
                foreach($form_messages  as $fieldname => $field_messages)
412
                {
413
                    $messages[$fieldname] = array_values($field_messages);
414
                }
415
 
416
                return new JsonModel([
417
                    'success'   => false,
418
                    'data'   => $messages
419
                ]);
420
            }
421
 
422
        }
423
 
424
 
425
 
426
        return new JsonModel([
427
            'success' => false,
428
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
429
        ]);
430
    }
431
 
432
    public function imageAction()
433
    {
788 stevensc 434
        // Obtener el usuario actual
1 efrain 435
        $currentUserPlugin = $this->plugin('currentUserPlugin');
436
        $currentUser = $currentUserPlugin->getUser();
788 stevensc 437
 
438
        // Obtener el operation
1 efrain 439
        $operation = $this->params()->fromRoute('operation');
440
 
788 stevensc 441
        $request = $this->getRequest();
1 efrain 442
 
789 stevensc 443
        if(!$request->isPost() && !$request->isGet()) {
788 stevensc 444
            return new JsonModel([
445
                'success' => false,
446
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
447
            ]);
448
        }
449
 
450
        $userMapper = UserMapper::getInstance($this->adapter);
451
        $storage = Storage::getInstance($this->config, $this->adapter);
452
        $target_path = $storage->getPathUser();
1 efrain 453
 
454
        if($request->isGet()) {
283 www 455
            $image = $storage->getUserImage($currentUser);
1 efrain 456
 
457
            return new JsonModel([
458
                'success' => true,
283 www 459
                'data' => $image,
1 efrain 460
            ]);
788 stevensc 461
        }
462
 
463
        if($request->isPost()) {
1 efrain 464
            if($operation == 'delete') {
788 stevensc 465
                // Si el usuario no tiene image
466
                if(!$currentUser->image) {
467
                    return new JsonModel([
468
                        'success'   => false,
469
                        'data'   =>  'ERROR_RECORD_NOT_FOUND'
470
                    ]);
1 efrain 471
                }
788 stevensc 472
 
473
                // Si no se puede borrar el archivo
474
                if(!$storage->deleteFile($target_path ,$currentUser->uuid, $currentUser->image)) {
475
                    return new JsonModel([
476
                        'success'   => false,
477
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
478
                    ]);
479
                }
1 efrain 480
 
788 stevensc 481
                // Actualizar el usuario
1 efrain 482
                $currentUser->image = '';
483
                if(!$userMapper->update($currentUser)) {
484
                    return new JsonModel([
485
                        'success'   => false,
486
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
487
                    ]);
488
                }
788 stevensc 489
 
490
                $this->logger->info('Se borro el image  del usuario ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
491
            }
492
 
493
            if($operation == 'upload') {
1 efrain 494
                $form = new ChangeImageForm($this->config);
495
                $data 	= array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
496
 
497
                $form->setData($data);
498
 
788 stevensc 499
                if(!$form->isValid()) {
500
                    $messages = [];
501
                    $form_messages = (array) $form->getMessages();
283 www 502
 
788 stevensc 503
                    foreach($form_messages  as $fieldname => $field_messages)
504
                    {
505
                        $messages[$fieldname] = array_values($field_messages);
1 efrain 506
                    }
507
 
788 stevensc 508
                    return new JsonModel([
509
                        'success'   => false,
510
                        'data'   => $messages
511
                    ]);
512
                }
283 www 513
 
788 stevensc 514
                $storage->setFiles($request->getFiles()->toArray());
515
                if(!$storage->setCurrentFilename('image')) {
516
                    $this->logger->err('Error al subir la imagen del usuario', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
517
                    return new JsonModel([
518
                        'success'   => false,
519
                        'data'   =>  'ERROR_UPLOAD_FILE'
520
                    ]);
521
                }
522
 
523
                // Si el usuario tiene image se borra
524
                if($currentUser->image) {
525
                    // Si el usuario tiene image, se borra
526
                    if(!$storage->deleteFile($target_path, $currentUser->uuid, $currentUser->image)) {
527
                        $this->logger->err('Error al borrar la imagen del usuario', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 efrain 528
                        return new JsonModel([
529
                            'success'   => false,
530
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
531
                        ]);
532
                    }
788 stevensc 533
                }
534
 
535
                // Obtener el tamaño de la imagen
536
                list( $target_width, $target_height ) = explode('x', $this->config['leaderslinked.image_sizes.user_size']);
537
 
538
                // Obtener el archivo temporal
539
                $source_filename = $storage->getTmpFilename();
791 stevensc 540
                $filename = $storage->getFilename();
541
                $target_filename = $storage->composePathToFilename(Storage::TYPE_USER, $currentUser->uuid, $filename);
788 stevensc 542
 
792 stevensc 543
 
544
                $this->logger->err('source_filename: ' . $source_filename . ' target_filename: ' . $target_filename);
545
 
788 stevensc 546
                if(!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
547
                    $this->logger->err('Error al subir la imagen del usuario', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 efrain 548
                    return new JsonModel([
549
                        'success'   => false,
788 stevensc 550
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1 efrain 551
                    ]);
552
                }
788 stevensc 553
 
554
 
791 stevensc 555
                $currentUser->image = $filename;
788 stevensc 556
                if(!$userMapper->updateImage($currentUser)) {
557
                    return new JsonModel([
558
                        'success'   => false,
559
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
560
                    ]);
561
                }
562
 
563
                if(!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
564
                    $this->logger->err('Error al subir la imagen del usuario', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
565
                    return new JsonModel([
566
                        'success'   => false,
567
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
568
                    ]);
569
                }
570
 
571
                $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
572
                $userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->id);
791 stevensc 573
 
788 stevensc 574
                if($userProfile) {
791 stevensc 575
                    $userProfile->image = $filename;
788 stevensc 576
                    $userProfileMapper->updateImage($userProfile);
577
                }
578
 
579
                $this->logger->info('Se actualizo el image del usuario', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 efrain 580
            }
283 www 581
 
582
 
1 efrain 583
            return new JsonModel([
584
                'success'   => true,
788 stevensc 585
                'data' =>  $storage->getUserImage($currentUser)
1 efrain 586
            ]);
587
        }
588
    }
589
 
590
 
591
 
592
    /**
593
     * Actualización de la ubucación
594
     * @return \Laminas\View\Model\JsonModel
595
     */
596
    public function locationAction()
597
    {
598
        $currentUserPlugin = $this->plugin('currentUserPlugin');
599
        $currentUser = $currentUserPlugin->getUser();
600
 
601
        $request = $this->getRequest();
602
        if($request->isGet()) {
603
            $hydrator = new ObjectPropertyHydrator();
604
 
605
            $currentUserPlugin = $this->plugin('currentUserPlugin');
606
            $currentUser = $currentUserPlugin->getUser();
607
 
608
            $locationMapper = LocationMapper::getInstance($this->adapter);
609
            $location = $locationMapper->fetchOne($currentUser->location_id);
610
 
611
 
612
            $data = [
613
                'formatted_address' => $location ? $location->formatted_address : '',
614
                'address1' => $location ? $location->address1 : '',
615
                'address2' => $location ? $location->address2 : '',
616
                'country' => $location ? $location->country : '',
617
                'state' => $location ? $location->state : '',
618
                'city1' => $location ? $location->city1 : '',
619
                'city2' => $location ? $location->city2 : '',
620
                'postal_code' => $location ? $location->postal_code : '',
621
                'latitude' => $location ? $location->latitude : '',
622
                'longitude' => $location ? $location->longitude : '',
623
            ];
624
 
625
            return new JsonModel([
626
                'success' => true,
627
                'data' => $data
628
            ]);
629
 
630
 
631
        } else  if($request->isPost()) {
632
 
633
            $form = new LocationForm();
634
            $dataPost = $request->getPost()->toArray();
635
 
636
            $form->setData($dataPost);
637
 
638
            if($form->isValid()) {
639
 
640
 
641
                $dataPost = (array) $form->getData();
642
 
643
                $location = new Location();
644
                $hydrator = new ObjectPropertyHydrator();
645
                $hydrator->hydrate($dataPost, $location);
646
 
647
                $location->id = $currentUser->location_id;
648
 
649
                $locationMapper = LocationMapper::getInstance($this->adapter);
650
                if($currentUser->location_id) {
651
                    $result = $locationMapper->update($location);
652
                } else {
653
                    $result = $locationMapper->insert($location);
654
 
655
                    if($result) {
656
                        $currentUser->location_id = $location->id;
657
 
658
 
659
                        $userMapper = UserMapper::getInstance($this->adapter);
660
                        $userMapper->updateLocation($currentUser);
661
                    }
662
                }
663
 
664
                if($result) {
665
                    $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
666
                    $userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->id);
667
                    if($userProfile) {
668
                        $userProfile->location_id = $location->id;
669
                        $userProfileMapper->updateLocation($userProfile);
670
                    }
671
                }
672
 
673
                if($result) {
674
                    $this->logger->info('Se actualizo la ubicación del usuario ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
675
 
676
                    $response = [
677
                        'success'   => true,
678
                        'data' => [
679
                            'formatted_address' => $location->formatted_address,
680
                            'message' =>  'LABEL_LOCATION_UPDATED' ,
681
 
682
                        ]
683
                    ];
684
                } else {
685
                    $response = [
686
                        'success'   => false,
687
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
688
                    ];
689
                }
690
 
691
 
692
 
693
                return new JsonModel($response);
694
 
695
            } else {
696
                return new JsonModel([
697
                    'success'   => false,
698
                    'data'   =>   'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY'
699
                ]);
700
            }
701
        }
702
 
703
 
704
        $data = [
705
            'success' => false,
706
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
707
        ];
708
 
709
 
710
        return new JsonModel($data);
711
    }
712
 
713
    public function privacyAction()
714
    {
715
        $request = $this->getRequest();
716
 
717
        if($request->isGet()) {
718
 
719
            $currentUserPlugin = $this->plugin('currentUserPlugin');
720
            $currentUser = $currentUserPlugin->getUser();
721
 
722
            $userMapper = UserMapper::getInstance($this->adapter);
723
            $user = $userMapper->fetchOne($currentUser->id);
724
 
725
            return new JsonModel([
726
                'success' => true,
727
                'data' => [
728
                    'show_in_search' => $user->show_in_search ? 1  : 0
729
                ]
730
            ]);
731
 
732
 
733
        } else if($request->isPost()) {
734
 
735
            $dataPost = $request->getPost()->toArray();
736
            $form = new PrivacySettingForm();
737
            $form->setData($dataPost);
738
 
739
            if($form->isValid()) {
740
                $currentUserPlugin = $this->plugin('currentUserPlugin');
741
                $currentUser = $currentUserPlugin->getUser();
742
 
743
                $dataPost = (array) $form->getData();
744
                $hydrator = new ObjectPropertyHydrator();
745
 
746
 
747
                $userMapper = UserMapper::getInstance($this->adapter);
748
                $hydrator->hydrate($dataPost, $currentUser);
749
 
750
                if($userMapper->updatePrivacy($currentUser)) {
751
                    $this->logger->info('Se guardo las preferencias de privacidad', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
752
                    $data = [
753
                        'success'   => true,
754
                        'data'      => 'LABEL_PRIVACY_UPDATE'
755
                    ];
756
                } else {
757
                    $data = [
758
                        'success'   => false,
759
                        'data'   => 'ERROR_UNKNOWN'
760
                    ];
761
                }
762
 
763
                return new JsonModel($data);
764
 
765
            } else {
766
                $messages = [];
767
 
768
 
769
 
770
                $form_messages = (array) $form->getMessages();
771
                foreach($form_messages  as $fieldname => $field_messages)
772
                {
773
 
774
                    $messages[$fieldname] = array_values($field_messages);
775
                }
776
 
777
                return new JsonModel([
778
                    'success'   => false,
779
                    'data'   => $messages
780
                ]);
781
            }
782
        }  else {
783
            $data = [
784
                'success' => false,
785
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
786
            ];
787
 
788
            return new JsonModel($data);
789
        }
790
 
791
        return new JsonModel($data);
792
 
793
    }
794
 
795
    public function basicAction()
796
    {
797
        $request = $this->getRequest();
798
 
799
        if($request->isGet()) {
800
            $currentUserPlugin = $this->plugin('currentUserPlugin');
801
            $currentUser = $currentUserPlugin->getUser();
802
 
803
            $userMapper = UserMapper::getInstance($this->adapter);
804
            $user = $userMapper->fetchOne($currentUser->id);
805
 
806
            return new JsonModel([
807
                'success' => true,
808
                'data' => [
809
                    'first_name' => $user->first_name,
810
                    'last_name' => $user->last_name,
811
                    'gender' => $user->gender ? $user->gender : '',
812
                    'phone' => $user->phone ? $user->phone : '',
813
                    'email' => $user->email,
814
                    'is_adult' => $user->is_adult,
815
                    'timezone' => $user->timezone,
816
                ]
817
            ]);
818
 
819
 
820
        } else if($request->isPost()) {
821
 
822
            $dataPost = $request->getPost()->toArray();
823
 
824
 
825
            if(empty($dataPost['is_adult'])) {
826
                $dataPost['is_adult'] = User::IS_ADULT_NO;
827
            } else {
828
                $dataPost['is_adult'] = $dataPost['is_adult'] == User::IS_ADULT_YES ? User::IS_ADULT_YES : User::IS_ADULT_NO;
829
            }
830
 
831
 
832
 
833
            $form = new  BasicForm();
834
            $form->setData($dataPost);
835
 
836
            if($form->isValid()) {
837
                $currentUserPlugin = $this->plugin('currentUserPlugin');
838
                $currentUser = $currentUserPlugin->getUser();
839
 
840
                $dataPost = (array) $form->getData();
841
                $hydrator = new ObjectPropertyHydrator();
842
 
843
 
844
                $userMapper = UserMapper::getInstance($this->adapter);
845
                $user = $userMapper->fetchOne($currentUser->id);
846
 
847
                $hydrator->hydrate($dataPost, $user);
848
 
849
 
850
 
851
                if($userMapper->updateBasic($user)) {
852
                    $this->logger->info('Se guardaron los datos básicos ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
853
                    $data = [
854
                        'success'   => true,
855
                        'data'      => 'LABEL_BASIC_UPDATE'
856
                    ];
857
                } else {
858
                    $data = [
859
                        'success'   => false,
860
                        'data'   => 'ERROR_UNKNOWN'
861
                    ];
862
                }
863
 
864
                return new JsonModel($data);
865
 
866
            } else {
867
                $messages = [];
868
 
869
 
870
 
871
                $form_messages = (array) $form->getMessages();
872
                foreach($form_messages  as $fieldname => $field_messages)
873
                {
874
 
875
                    $messages[$fieldname] = array_values($field_messages);
876
                }
877
 
878
                return new JsonModel([
879
                    'success'   => false,
880
                    'data'   => $messages
881
                ]);
882
            }
883
        }  else {
884
            $data = [
885
                'success' => false,
886
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
887
            ];
888
 
889
            return new JsonModel($data);
890
        }
891
 
892
        return new JsonModel($data);
893
 
894
    }
895
 
896
    public function browsersAction()
897
    {
898
        $request = $this->getRequest();
899
        if($request->isGet()) {
900
 
901
            $currentUserPlugin = $this->plugin('currentUserPlugin');
902
            $currentUser = $currentUserPlugin->getUser();
903
 
904
            $search = '';
905
            $page               = intval($this->params()->fromQuery('start', 1), 10);
906
            $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
907
            $order_field        = 'updated_on';
908
            $order_direction = 'DESC';
909
 
910
 
911
 
912
            $userBrowserMapper = UserBrowserMapper::getInstance($this->adapter);
913
            $paginator = $userBrowserMapper->fetchAllDataTable($currentUser->id, $search, $page, $records_x_page, $order_field, $order_direction);
914
 
915
            $items = [];
916
            $records = $paginator->getCurrentItems();
917
            foreach($records as $record)
918
            {
919
                $item = [
920
                    'id' => $record->id,
921
                    'platform' => $record->platform,
922
                    'browser' => $record->browser,
923
                    'device_type' => $record->device_type,
924
                    'version' => $record->version,
925
                    'updated_on' => $record->updated_on,
926
                ];
927
 
928
                array_push($items, $item);
929
            }
930
 
931
            return new JsonModel([
932
                'success' => true,
933
                'data' => [
934
                    'items' => $items,
935
                    'total' => $paginator->getTotalItemCount(),
936
                ]
937
            ]);
938
 
939
        } else {
940
            return new JsonModel(['success' => false, 'data' => 'ERROR_METHOD_NOT_ALLOWED' ]);
941
        }
942
    }
943
    public function devicesAction()
944
    {
945
        $request = $this->getRequest();
946
        if($request->isGet()) {
947
 
948
            $currentUserPlugin = $this->plugin('currentUserPlugin');
949
            $currentUser = $currentUserPlugin->getUser();
950
 
951
            $page               = intval($this->params()->fromPost('start', 1), 10);
952
            $records_x_page     = intval($this->params()->fromPost('length', 10), 10);
953
 
954
 
955
            /*
956
             select d.platform, d.brand, d.manufacturer, d.model, d.version,
957
             dh.ip, dh.updated_on  from tbl_device_history as dh
958
             inner join tbl_devices as d on d.id  = dh.device_id
959
             where dh.user_id = 4 order by dh.updated_on  desc
960
             */
961
 
962
            $queryMapper = QueryMapper::getInstance($this->adapter);
963
            $select = $queryMapper->getSql()->select();
964
            $select->columns(['ip', 'updated_on']);
965
            $select->from(['dh' => DeviceHistoryMapper::_TABLE]);
966
            $select->join(['d' => DeviceMapper::_TABLE], 'd.id  = dh.device_id', ['id', 'platform','brand','manufacturer','model','version']);
967
            $select->where->equalTo('dh.user_id', $currentUser->id);
968
            $select->order('updated_on desc ');
969
 
970
 
971
 
972
            $hydrator   = new ArraySerializableHydrator();
973
            $resultset  = new HydratingResultSet($hydrator);
974
 
975
            $adapter = new DbSelect($select, $queryMapper->getSql(), $resultset);
976
            $paginator = new Paginator($adapter);
977
            $paginator->setItemCountPerPage($records_x_page);
978
            $paginator->setCurrentPageNumber($page);
979
 
980
            $items = [];
981
            $records = $paginator->getCurrentItems();
982
            foreach($records as $record)
983
            {
984
                $item = [
985
                    'id' => $record['id'],
986
                    'platform' => $record['platform'],
987
                    'brand' => $record['brand'],
988
                    'manufacturer' => $record['manufacturer'],
989
                    'version' => $record['version'],
990
                    'model' => $record['model'],
991
                    'version' => $record['version'],
992
                    'ip' => $record['ip'],
993
                    'updated_on' => $record['updated_on'],
994
                ];
995
 
996
                array_push($items, $item);
997
            }
998
 
999
            return new JsonModel([
1000
                'success' => true,
1001
                'data' => [
1002
                    'items' => $items,
1003
                    'total' => $paginator->getTotalItemCount(),
1004
                ]
1005
            ]);
1006
 
1007
        } else {
1008
            return new JsonModel(['success' => false, 'data' => 'ERROR_METHOD_NOT_ALLOWED' ]);
1009
        }
1010
    }
1011
 
1012
 
1013
    public function ipsAction()
1014
    {
1015
        $request = $this->getRequest();
1016
        if($request->isGet()) {
1017
 
1018
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1019
            $currentUser = $currentUserPlugin->getUser();
1020
 
1021
            $search = '';
1022
            $page               = intval($this->params()->fromPost('start', 1), 10);
1023
            $records_x_page     = intval($this->params()->fromPost('length', 10), 10);
1024
            $order_field        = 'updated_on';
1025
            $order_direction = 'DESC';
1026
 
1027
 
1028
 
1029
            $userBrowserMapper = UserIpMapper::getInstance($this->adapter);
1030
            $paginator = $userBrowserMapper->fetchAllDataTable($currentUser->id, $search, $page, $records_x_page, $order_field, $order_direction);
1031
 
1032
            $items = [];
1033
            $records = $paginator->getCurrentItems();
1034
            foreach($records as $record)
1035
            {
1036
                $item = [
1037
                    'id' => $record->id,
1038
                    'ip' => $record->ip,
1039
                    'country_name' => $record->country_name,
1040
                    'state_name' => $record->state_name,
1041
                    'city' => $record->city,
1042
                    'postal_code' => $record->postal_code,
1043
                    'updated_on' => $record->updated_on,
1044
                ];
1045
 
1046
                array_push($items, $item);
1047
            }
1048
 
1049
            return new JsonModel([
1050
                'success' => true,
1051
                'data' => [
1052
                    'items' => $items,
1053
                    'total' => $paginator->getTotalItemCount(),
1054
                ]
1055
            ]);
1056
 
1057
        } else {
1058
            return new JsonModel(['success' => false, 'data' => 'ERROR_METHOD_NOT_ALLOWED' ]);
1059
        }
1060
    }
1061
 
1062
    public function transactionsAction()
1063
    {
1064
        $request = $this->getRequest();
1065
        if($request->isGet()) {
1066
 
1067
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1068
            $currentUser = $currentUserPlugin->getUser();
1069
 
1070
            $search = '';
1071
            $page               = intval($this->params()->fromPost('start', 1), 10);
1072
            $records_x_page     = intval($this->params()->fromPost('length', 10), 10);
1073
            $order_field        = 'updated_on';
1074
            $order_direction = 'DESC';
1075
 
1076
            $status = [
1077
                Transaction::STATUS_CANCELLED => 'LABEL_CANCELLED',
1078
                Transaction::STATUS_PENDING => 'LABEL_PENDING',
1079
                Transaction::STATUS_PROCESSING => 'LABEL_PROCESSING',
1080
                Transaction::STATUS_REJECTED => 'LABEL_REJECTED',
1081
                Transaction::STATUS_COMPLETED => 'LABEL_COMPLETED',
1082
                Transaction::STATUS_CANCELLED => 'LABEL_CANCELLED',
1083
            ];
1084
 
1085
            $types = [
1086
                Transaction::TYPE_COUPON => 'LABEL_COUPON',
1087
                Transaction::TYPE_PAYMENT => 'LABEL_PAYMENT',
1088
                Transaction::TYPE_REVERSE => 'LABEL_REVERSE',
1089
                Transaction::TYPE_TRANSFER => 'LABEL_TRANSFER',
1090
            ];
1091
 
1092
            $providers = [
1093
                Provider::PAYPAL => 'LABEL_PAYPAL',
1094
            ];
1095
 
1096
            $transactionMapper = TransactionMapper::getInstance($this->adapter);
1097
            $paginator = $transactionMapper->fetchAllDataTable($currentUser->id, $search, $page, $records_x_page, $order_field, $order_direction);
1098
 
1099
            $items = [];
1100
            $records = $paginator->getCurrentItems();
1101
            foreach($records as $record)
1102
            {
1103
                $item = [
1104
                    'id' => $record->id,
1105
                    'description' => $record->description,
1106
                    'provider' => $providers[$record->provider],
1107
                    'type' => $types[$record->type],
1108
                    'status' => $status[$record->status],
1109
                    'previous' => $record->previous,
1110
                    'amount' => $record->amount,
1111
                    'current' => $record->current,
1112
                    'updated_on' => $record->updated_on,
1113
                ];
1114
 
1115
                array_push($items, $item);
1116
            }
1117
 
1118
            return new JsonModel([
1119
                'success' => true,
1120
                'data' => [
1121
                    'items' => $items,
1122
                    'total' => $paginator->getTotalItemCount(),
1123
                ]
1124
            ]);
1125
 
1126
        } else {
1127
            return new JsonModel(['success' => false, 'data' => 'ERROR_METHOD_NOT_ALLOWED' ]);
1128
        }
1129
    }
1130
 
1131
 
1132
 
1133
    public function addFundAction()
1134
    {
1135
 
1136
        $request = $this->request;
1137
        if($request->isPost()) {
1138
 
1139
            $form = new FundsAddForm();
1140
            $form->setData($request->getPost()->toArray());
1141
            if($form->isValid()) {
1142
 
1143
                $currentUserPlugin = $this->plugin('currentUserPlugin');
1144
                $currentUser = $currentUserPlugin->getUser();
1145
 
1146
 
1147
 
1148
 
1149
                $dataPost = (array) $form->getData();
1150
 
1151
                $description    = $dataPost['description'];
1152
                $amount         = $dataPost['amount'];
1153
 
1154
 
1155
 
1156
                $sandbox = $this->config['leaderslinked.runmode.sandbox_paypal'];
1157
                if($sandbox) {
1158
                    //$account_id     = $this->config['leaderslinked.paypal.sandbox_account_id'];
1159
                    $client_id      = $this->config['leaderslinked.paypal.sandobx_client_id'];
1160
                    $client_secret  = $this->config['leaderslinked.paypal.sandbox_client_secret'];
1161
 
1162
 
1163
                    $environment = new SandboxEnvironment($client_id, $client_secret);
1164
 
1165
                } else {
1166
                    // $account_id     = $this->config['leaderslinked.paypal.production_account_id'];
1167
                    $client_id      = $this->config['leaderslinked.paypal.production_client_id'];
1168
                    $client_secret  = $this->config['leaderslinked.paypal.production_client_secret'];
1169
 
1170
                    $environment = new ProductionEnvironment($client_id, $client_secret);
1171
                }
1172
 
1173
                $internal_id = uniqid(Provider::PAYPAL, true);
1174
                $client = new PayPalHttpClient($environment);
1175
                $request = new OrdersCreateRequest();
1176
 
1177
 
1178
                //$request->prefer('return=representation');
1179
                $request->body = [
1180
                    'intent' => 'CAPTURE',
1181
                    'purchase_units' => [[
1182
                        'reference_id' => $internal_id,
1183
                        'description' => $description,
1184
                        'amount' => [
1185
                            'value' => number_format($amount, 2),
1186
                            'currency_code' => 'USD'
1187
                        ]
1188
                    ]],
1189
                    'application_context' => [
1190
                        'brand_name' => 'Leaders Linked',
1191
                        'locale' => 'es-UY',
1192
                        'cancel_url' => $this->url()->fromRoute('paypal/cancel', [] , ['force_canonical' => true]),
1193
                        'return_url' => $this->url()->fromRoute('paypal/success', [] , ['force_canonical' => true]),
1194
                    ]
1195
                ];
1196
 
1197
                try {
1198
                    // Call API with your client and get a response for your call
1199
                    $response = $client->execute($request);
1200
 
1201
 
1202
                    $external_id = $response->result->id;
1203
                    $approve_url = '';
1204
                    if($response->result->status == 'CREATED') {
1205
 
1206
                        $response->result->id;
1207
                        foreach($response->result->links as $link)
1208
                        {
1209
                            if($link->rel == 'approve') {
1210
                                $approve_url = $link->href;
1211
                            }
1212
                            //print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
1213
                        }
1214
 
1215
 
1216
                    }
1217
 
1218
 
1219
                    //echo json_encode($resp, JSON_PRETTY_PRINT), "\n";
1220
 
1221
 
1222
 
1223
 
1224
 
1225
                    // To toggle printing the whole response body comment/uncomment below line
1226
                    // echo json_encode($resp->result, JSON_PRETTY_PRINT), "\n";
1227
                    if($external_id && $approve_url) {
1228
 
1229
                        $transaction = new Transaction();
1230
                        $transaction->internal_id = $internal_id;
1231
                        $transaction->external_id = $external_id;
1232
                        $transaction->provider = Provider::PAYPAL;
1233
                        $transaction->user_id = $currentUser->id;
1234
                        $transaction->previous = 0;
1235
                        $transaction->amount = $amount;
1236
                        $transaction->current = 0;
1237
                        $transaction->status = Transaction::STATUS_PENDING;
1238
                        $transaction->type = Transaction::TYPE_PAYMENT;
1239
                        $transaction->description = $description;
1240
                        $transaction->request = json_encode($response, JSON_PRETTY_PRINT);
1241
 
1242
                        $requestId = Provider::PAYPAL . '-' . $external_id;
1243
 
1244
                        $this->cache->setItem($requestId, serialize($transaction));
1245
 
1246
 
1247
 
1248
 
1249
                        return new JsonModel(['success' => true, 'data' => $approve_url]);
1250
                    } else {
1251
                        return new JsonModel(['success' => false, 'data' => 'ERROR_TRANSACTION_NOT_SAVED']);
1252
                    }
1253
 
1254
 
1255
 
1256
                } catch (HttpException $ex) {
1257
 
1258
 
1259
                    return new JsonModel(['success' => false, 'data' => $ex->getMessage()]);
1260
                }
1261
 
1262
            } else {
1263
 
1264
                $message = '';;
1265
                $form_messages = (array) $form->getMessages();
1266
                foreach($form_messages  as $fieldname => $field_messages)
1267
                {
1268
                    foreach( $field_messages as $key => $value)
1269
                    {
1270
                        $message = $value;
1271
                    }
1272
                }
1273
 
1274
                $response = [
1275
                    'success'   => false,
1276
                    'data'   => $message
1277
                ];
1278
 
1279
                return new JsonModel($response);
1280
 
1281
            }
1282
 
1283
        } else {
1284
            return new JsonModel(['success' => false, 'data' => 'ERROR_METHOD_NOT_ALLOWED' ]);
1285
        }
1286
    }
1287
 
1288
    public function removeFacebookAction()
1289
    {
1290
        $request = $this->getRequest();
1291
        if($request->isPost()) {
1292
 
1293
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1294
            $currentUser = $currentUserPlugin->getUser();
1295
 
1296
 
1297
            $userProviderMapper = UserProviderMapper::getInstance($this->adapter);
1298
            $userProvider = $userProviderMapper->fetchOneByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_FACEBOOK);
1299
 
1300
            if($userProvider) {
1301
 
1302
                if($userProviderMapper->deleteByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_FACEBOOK)) {
1303
                    return new JsonModel([
1304
                        'success' => true,
1305
                        'data' => 'LABEL_USER_PROVIDER_FACEBOOK_REMOVED'
1306
                    ]);
1307
 
1308
                } else {
1309
                    return new JsonModel([
1310
                        'success' => false,
1311
                        'data' => $userProviderMapper->getError()
1312
                    ]);
1313
                }
1314
 
1315
 
1316
            } else {
1317
                return new JsonModel([
1318
                    'success' => false,
1319
                    'data' => 'ERROR_USER_PROVIDER_FACEBOOK_NOT_FOUND'
1320
                ]);
1321
            }
1322
 
1323
 
1324
        } else {
1325
            return new JsonModel([
1326
                'success' => false,
1327
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1328
            ]);
1329
        }
1330
    }
1331
 
1332
    public function addFacebookAction()
1333
    {
1334
        /*
1335
        $request = $this->getRequest();
1336
        if($request->isGet()) {
1337
 
1338
            try {
1339
                $app_id = $this->config['leaderslinked.facebook.app_id'];
1340
                $app_password = $this->config['leaderslinked.facebook.app_password'];
1341
                $app_graph_version = $this->config['leaderslinked.facebook.app_graph_version'];
1342
                //$app_url_auth = $this->config['leaderslinked.facebook.app_url_auth'];
1343
                //$redirect_url = $this->config['leaderslinked.facebook.app_redirect_url'];
1344
 
1345
 
1346
 
1347
                $fb = new \Facebook\Facebook([
1348
                    'app_id' => $app_id,
1349
                    'app_secret' => $app_password,
1350
                    'default_graph_version' => $app_graph_version,
1351
                ]);
1352
 
1353
                $app_url_auth =  $this->url()->fromRoute('oauth/facebook', [], ['force_canonical' => true]);
1354
                $helper = $fb->getRedirectLoginHelper();
1355
                $permissions = ['email', 'public_profile']; // Optional permissions
1356
                $facebookUrl = $helper->getLoginUrl($app_url_auth, $permissions);
1357
 
1358
                return new JsonModel([
1359
                    'success' => true,
1360
                    'data' => $facebookUrl
1361
                ]);
1362
            } catch (\Throwable $e) {
1363
                return new JsonModel([
1364
                    'success' => false,
1365
                    'data' =>  'ERROR_WE_COULD_NOT_CONNECT_TO_FACEBOOK'
1366
                ]);
1367
            }
1368
 
1369
        } else {
1370
            return new JsonModel([
1371
                'success' => false,
1372
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1373
            ]);
1374
        }*/
1375
    }
1376
 
1377
    public function removeTwitterAction()
1378
    {
1379
        $request = $this->getRequest();
1380
        if($request->isPost()) {
1381
 
1382
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1383
            $currentUser = $currentUserPlugin->getUser();
1384
 
1385
 
1386
            $userProviderMapper = UserProviderMapper::getInstance($this->adapter);
1387
            $userProvider = $userProviderMapper->fetchOneByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_TWITTER);
1388
 
1389
            if($userProvider) {
1390
 
1391
                if($userProviderMapper->deleteByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_TWITTER)) {
1392
                    return new JsonModel([
1393
                        'success' => true,
1394
                        'data' => 'LABEL_USER_PROVIDER_TWITTER_REMOVED'
1395
                    ]);
1396
 
1397
                } else {
1398
                    return new JsonModel([
1399
                        'success' => false,
1400
                        'data' => $userProviderMapper->getError()
1401
                    ]);
1402
                }
1403
 
1404
 
1405
            } else {
1406
                return new JsonModel([
1407
                    'success' => false,
1408
                    'data' => 'ERROR_USER_PROVIDER_TWITTER_NOT_FOUND'
1409
                ]);
1410
            }
1411
 
1412
 
1413
        } else {
1414
            return new JsonModel([
1415
                'success' => false,
1416
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1417
            ]);
1418
        }
1419
    }
1420
 
1421
    public function addTwitterAction()
1422
    {
1423
 
1424
        $request = $this->getRequest();
1425
        if($request->isGet()) {
1426
 
1427
            try {
1428
                if($this->config['leaderslinked.runmode.sandbox']) {
1429
 
1430
                    $twitter_api_key = $this->config['leaderslinked.twitter.sandbox_api_key'];
1431
                    $twitter_api_secret = $this->config['leaderslinked.twitter.sandbox_api_secret'];
1432
 
1433
                } else {
1434
                    $twitter_api_key = $this->config['leaderslinked.twitter.production_api_key'];
1435
                    $twitter_api_secret = $this->config['leaderslinked.twitter.production_api_secret'];
1436
                }
1437
 
1438
 
1439
 
1440
                //Twitter
1441
                //$redirect_url =  $this->url()->fromRoute('oauth/twitter', [], ['force_canonical' => true]);
1442
                $redirect_url = $this->config['leaderslinked.twitter.app_redirect_url'];
1443
                $twitter = new \Abraham\TwitterOAuth\TwitterOAuth($twitter_api_key, $twitter_api_secret);
1444
                $request_token =  $twitter->oauth('oauth/request_token', ['oauth_callback' => $redirect_url ]);
1445
                $twitterUrl = $twitter->url('oauth/authorize', [ 'oauth_token' => $request_token['oauth_token'] ]);
1446
 
1447
                $twitterSession = new \Laminas\Session\Container('twitter');
1448
                $twitterSession->oauth_token = $request_token['oauth_token'];
1449
                $twitterSession->oauth_token_secret = $request_token['oauth_token_secret'];
1450
 
1451
                return new JsonModel([
1452
                    'success' => true,
1453
                    'data' =>  $twitterUrl
1454
                ]);
1455
            } catch (\Throwable $e) {
1456
                return new JsonModel([
1457
                    'success' => false,
1458
                    'data' =>  'ERROR_WE_COULD_NOT_CONNECT_TO_TWITTER'
1459
                ]);
1460
            }
1461
 
1462
        } else {
1463
            return new JsonModel([
1464
                'success' => false,
1465
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1466
            ]);
1467
        }
1468
 
1469
 
1470
    }
1471
 
1472
    public function removeGoogleAction()
1473
    {
1474
        $request = $this->getRequest();
1475
        if($request->isPost()) {
1476
 
1477
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1478
            $currentUser = $currentUserPlugin->getUser();
1479
 
1480
 
1481
            $userProviderMapper = UserProviderMapper::getInstance($this->adapter);
1482
            $userProvider = $userProviderMapper->fetchOneByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_GOOGLE);
1483
 
1484
            if($userProvider) {
1485
 
1486
                if($userProviderMapper->deleteByUserIdAndProvider($currentUser->id, UserProvider::PROVIDER_GOOGLE)) {
1487
                    return new JsonModel([
1488
                        'success' => true,
1489
                        'data' => 'LABEL_USER_PROVIDER_GOOGLE_REMOVED'
1490
                    ]);
1491
 
1492
                } else {
1493
                    return new JsonModel([
1494
                        'success' => false,
1495
                        'data' => $userProviderMapper->getError()
1496
                    ]);
1497
                }
1498
 
1499
 
1500
            } else {
1501
                return new JsonModel([
1502
                    'success' => false,
1503
                    'data' => 'ERROR_USER_PROVIDER_GOOGLE_NOT_FOUND'
1504
                ]);
1505
            }
1506
 
1507
 
1508
        } else {
1509
            return new JsonModel([
1510
                'success' => false,
1511
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1512
            ]);
1513
        }
1514
    }
1515
 
1516
    public function addGoogleAction()
1517
    {
1518
        $request = $this->getRequest();
1519
        if($request->isGet()) {
1520
 
1521
            try {
1522
 
1523
 
1524
                //Google
1525
                $google = new \Google_Client();
1526
                $google->setAuthConfig('data/google/auth-leaderslinked/apps.google.com_secreto_cliente.json');
1527
                $google->setAccessType("offline");        // offline access
1528
 
1529
                $google->setIncludeGrantedScopes(true);   // incremental auth
1530
 
1531
                $google->addScope('profile');
1532
                $google->addScope('email');
1533
 
1534
                // $redirect_url =  $this->url()->fromRoute('oauth/google', [], ['force_canonical' => true]);
1535
                $redirect_url = $this->config['leaderslinked.google_auth.app_redirect_url'];
1536
 
1537
                $google->setRedirectUri($redirect_url);
1538
                $googleUrl = $google->createAuthUrl();
1539
 
1540
                return new JsonModel([
1541
                    'success' => true,
1542
                    'data' =>  $googleUrl
1543
                ]);
1544
            } catch (\Throwable $e) {
1545
                return new JsonModel([
1546
                    'success' => false,
1547
                    'data' =>  'ERROR_WE_COULD_NOT_CONNECT_TO_GOOGLE'
1548
                ]);
1549
            }
1550
 
1551
        } else {
1552
            return new JsonModel([
1553
                'success' => false,
1554
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1555
            ]);
1556
        }
1557
    }
1558
 
1559
    public function deleteAccountAction()
1560
    {
1561
 
1562
 
1563
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1564
        $user = $currentUserPlugin->getUser();
1565
 
1566
 
1567
 
1568
        $request = $this->getRequest();
1569
 
1570
        if($request->isGet()) {
1571
 
1572
            $this->sendEmailDeleteAccountKey($user);
1573
 
1574
 
1575
            return new JsonModel([
1576
                'success' => true,
190 efrain 1577
                'data' =>  'LABEL_DELETE_ACCOUNT_WE_HAVE_SENT_A_CONFIRMATION_CODE'
1578
 
1 efrain 1579
            ]);
1580
 
1581
        } else  if($request->isPost()) {
1582
 
1583
            $code = $this->params()->fromPost('code');
1584
            if(empty($code) || $code != $user->delete_account_key) {
1585
 
1586
                $this->sendEmailDeleteAccountKey($user);
1587
 
1588
                return new JsonModel([
1589
                    'success' => false,
190 efrain 1590
                    'data' => 'ERROR_DELETE_ACCOUNT_CONFIRMATION_CODE_IS_WRONG'
1 efrain 1591
                ]);
1592
            }
1593
 
1594
            $delete_account_generated_on = strtotime($user->delete_account_generated_on);
1595
            $expiry_time = $delete_account_generated_on + $this->config['leaderslinked.security.delete_account_expired'];
1596
 
1597
 
1598
            if (time() > $expiry_time) {
1599
 
1600
                $this->sendEmailDeleteAccountKey($user) ;
1601
 
1602
                return new JsonModel([
1603
                    'success' => false,
190 efrain 1604
                    'data' => 'ERROR_DELETE_ACCOUNT_CONFIRMATION_CODE_EXPIRED'
1 efrain 1605
                ]);
1606
 
1607
 
1608
            }
1609
 
1610
            $userDeleted  = new UserDeleted();
1611
            $userDeleted->user_id = $user->id;
1612
            $userDeleted->first_name = $user->first_name;
1613
            $userDeleted->last_name = $user->last_name;
1614
            $userDeleted->email = $user->email;
1615
            $userDeleted->image = $user->image;
1616
            $userDeleted->phone = $user->phone;
1617
            $userDeleted->pending = UserDeleted::PENDING_YES;
1618
 
1619
 
1620
            $userDeletedMapper = UserDeletedMapper::getInstance($this->adapter);
1621
            if ($userDeletedMapper->insert($userDeleted)) {
1622
 
1623
                $this->sendEmailDeleteAccountCompleted($user);
1624
 
1625
                $user->first_name = 'LABEL_DELETE_ACCOUNT_FIRST_NAME';
1626
                $user->last_name = 'LABEL_DELETE_ACCOUNT_LAST_NAME';
1627
                $user->email = 'user-deleted-' . uniqid() . '@leaderslinked.com';
1628
                $user->image = '';
1629
                $user->usertype_id = UserType::USER_DELETED;
1630
                $user->status = User::STATUS_DELETED;
1631
                $user->delete_account_key = '';
1632
                $user->delete_account_generated_on = '';
1633
 
1634
                $userMapper = UserMapper::getInstance($this->adapter);
1635
                if($userMapper->update($user)) {
1636
 
1637
 
1638
 
1639
                    return new JsonModel([
1640
                        'success' => true,
190 efrain 1641
                        'data' => 'LABEL_DELETE_ACCOUNT_WE_HAVE_STARTED_DELETING_YOUR_DATA',
1 efrain 1642
                    ]);
1643
 
1644
 
1645
                } else {
1646
                    return new JsonModel([
1647
                        'success' => false,
190 efrain 1648
                        'data' => $userDeletedMapper->getError()
1 efrain 1649
                    ]);
1650
                }
1651
 
1652
 
1653
 
1654
            } else {
1655
                return new JsonModel([
1656
                    'success' => false,
190 efrain 1657
                    'data' =>  $userDeletedMapper->getError()
1658
 
1 efrain 1659
                ]);
1660
            }
1661
 
1662
 
1663
 
1664
 
1665
 
1666
        }
1667
 
1668
 
1669
            return new JsonModel([
1670
                'success' => false,
1671
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1672
            ]);
1673
    }
1674
 
1675
 
1676
 
1677
 
1678
    private function sendEmailDeleteAccountKey($user)
1679
    {
1680
        $delete_account_key = Functions::generatePassword(8);
1681
 
1682
        $userMapper = UserMapper::getInstance($this->adapter);
1683
        $userMapper->updateDeleteAccountKey($user->id, $delete_account_key);
1684
 
1685
        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
1686
        $emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_DELETE_ACCOUNT_CODE, $user->network_id);
1687
        if($emailTemplate) {
1688
            $arrayCont = [
1689
                'firstname' => $user->first_name,
1690
                'lastname'  => $user->last_name,
1691
                'code'      => $delete_account_key,
1692
                'link'      => ''
1693
            ];
1694
 
1695
            $email = new QueueEmail($this->adapter);
1696
            $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
1697
        }
1698
    }
1699
 
1700
 
1701
    private function sendEmailDeleteAccountCompleted($user)
1702
    {
1703
 
1704
        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
1705
        $emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_DELETE_ACCOUNT_COMPLETED, $user->network_id);
1706
        if($emailTemplate) {
1707
            $arrayCont = [
1708
                'firstname' => $user->first_name,
1709
                'lastname'  => $user->last_name,
1710
                'code'      => '',
1711
                'link'      => ''
1712
            ];
1713
 
1714
            $email = new QueueEmail($this->adapter);
1715
            $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
1716
        }
1717
    }
1718
 
1719
}