Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16283 | Rev 16293 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 16283 Rev 16292
Línea 2... Línea 2...
2
 
2
 
Línea 3... Línea 3...
3
declare(strict_types=1);
3
declare(strict_types=1);
Línea 4... Línea 4...
4
 
4
 
5
namespace LeadersLinked\Controller;
5
namespace LeadersLinked\Controller;
6
 
-
 
7
use Laminas\Db\Adapter\AdapterInterface;
6
 
-
 
7
use LeadersLinked\Model\User;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
use LeadersLinked\Library\Zoom;
9
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
-
 
10
use LeadersLinked\Model\Network;
-
 
11
use Laminas\View\Model\JsonModel;
-
 
12
use Laminas\View\Model\ViewModel;
10
use Laminas\Log\LoggerInterface;
13
use LeadersLinked\Model\ChatUser;
11
use Laminas\View\Model\JsonModel;
14
use LeadersLinked\Model\ChatGroup;
12
use Laminas\View\Model\ViewModel;
-
 
13
use LeadersLinked\Library\Functions;
-
 
14
use LeadersLinked\Mapper\UserMapper;
-
 
15
use LeadersLinked\Mapper\ConnectionMapper;
-
 
16
use LeadersLinked\Mapper\ChatMessageMapper;
-
 
17
use LeadersLinked\Mapper\ChatGroupMapper;
15
use LeadersLinked\Model\Connection;
18
use LeadersLinked\Mapper\ChatGroupMessageMapper;
16
use LeadersLinked\Library\Functions;
-
 
17
use LeadersLinked\Mapper\UserMapper;
-
 
18
use LeadersLinked\Mapper\UtilMapper;
-
 
19
use LeadersLinked\Model\ChatMessage;
-
 
20
use LeadersLinked\Model\ZoomMeeting;
-
 
21
use LeadersLinked\Model\ChatGroupUser;
-
 
22
use Laminas\Db\Adapter\AdapterInterface;
-
 
23
use LeadersLinked\Form\Chat\ZoomAddForm;
19
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
24
use LeadersLinked\Mapper\ChatUserMapper;
20
use LeadersLinked\Mapper\ChatUserMapper;
-
 
21
use LeadersLinked\Model\ChatMessage;
25
use LeadersLinked\Model\ZoomMeetingUser;
22
use LeadersLinked\Model\ChatGroupMessage;
-
 
23
use LeadersLinked\Model\ChatGroupUserMessage;
-
 
24
use LeadersLinked\Model\Connection;
26
use LeadersLinked\Mapper\ChatGroupMapper;
-
 
27
use LeadersLinked\Model\ChatGroupMessage;
-
 
28
use LeadersLinked\Mapper\ConnectionMapper;
25
use LeadersLinked\Model\ChatGroup;
29
use LeadersLinked\Form\CreateChatGroupForm;
26
use LeadersLinked\Model\ChatUser;
30
use LeadersLinked\Mapper\ChatMessageMapper;
27
use LeadersLinked\Form\CreateChatGroupForm;
31
use LeadersLinked\Mapper\ZoomMeetingMapper;
-
 
32
use LeadersLinked\Mapper\ChatGroupUserMapper;
-
 
33
use LeadersLinked\Model\ChatGroupUserMessage;
-
 
34
use LeadersLinked\Mapper\ZoomMeetingUserMapper;
-
 
35
use LeadersLinked\Mapper\ChatGroupMessageMapper;
Línea 28... Línea 36...
28
use LeadersLinked\Mapper\ChatGroupUserMapper;
36
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
29
use LeadersLinked\Model\ChatGroupUser;
37
use Laminas\Mvc\Controller\AbstractActionController;
30
use LeadersLinked\Mapper\UtilMapper;
38
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
Línea 349... Línea 357...
349
                        'url_send'                  => $this->url()->fromRoute('chat/send', ['id' => $user->uuid]),
357
                        'url_send'                  => $this->url()->fromRoute('chat/send', ['id' => $user->uuid]),
350
                        'url_upload'                => $this->url()->fromRoute('chat/upload', ['id' => $user->uuid]),
358
                        'url_upload'                => $this->url()->fromRoute('chat/upload', ['id' => $user->uuid]),
351
                        'url_mark_seen'             => $this->url()->fromRoute('chat/mark-seen', ['id' => $user->uuid]),
359
                        'url_mark_seen'             => $this->url()->fromRoute('chat/mark-seen', ['id' => $user->uuid]),
352
                        'url_mark_received'         => $this->url()->fromRoute('chat/mark-received', ['id' => $user->uuid]),
360
                        'url_mark_received'         => $this->url()->fromRoute('chat/mark-received', ['id' => $user->uuid]),
353
                        'url_get_all_messages'      => $this->url()->fromRoute('chat/get-all-messages', ['id' => $user->uuid]),
361
                        'url_get_all_messages'      => $this->url()->fromRoute('chat/get-all-messages', ['id' => $user->uuid]),
-
 
362
                        'url_zoom'                  => $this->url()->fromRoute('chat/zoom', ['id' => $user->uuid, 'type' => 'chat']),
354
                        'id'                        => $user->uuid,
363
                        'id'                        => $user->uuid,
355
                        'name'                      => trim($user->first_name . ' ' . $user->last_name),
364
                        'name'                      => trim($user->first_name . ' ' . $user->last_name),
356
                        'image'                     => $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]),
365
                        'image'                     => $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]),
357
                        /*'profile'                   => $this->url()->fromRoute('profile/view', ['id' =>$user->uuid]),*/
366
                        /*'profile'                   => $this->url()->fromRoute('profile/view', ['id' =>$user->uuid]),*/
358
                        'type'                      => 'user',
367
                        'type'                      => 'user',
Línea 2502... Línea 2511...
2502
            return true;
2511
            return true;
2503
        }
2512
        }
Línea 2504... Línea 2513...
2504
 
2513
 
2505
        return ($diff->s) > 15 ? true : false;
2514
        return ($diff->s) > 15 ? true : false;
-
 
2515
    }
-
 
2516
 
-
 
2517
    public function zoomAction()
-
 
2518
    {
-
 
2519
        $request = $this->getRequest();
-
 
2520
        if ($request->isPost()) {
-
 
2521
            $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2522
            $currentUser = $currentUserPlugin->getUser();
-
 
2523
            $id = $this->params()->fromRoute('id');
-
 
2524
 
-
 
2525
            if (!$id) {
-
 
2526
                return new JsonModel([
-
 
2527
                    'success' => false,
-
 
2528
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
2529
                ]);
-
 
2530
            }
-
 
2531
 
-
 
2532
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2533
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
-
 
2534
            $chatUser = null;
-
 
2535
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
-
 
2536
 
-
 
2537
            if ($chatGroup) {
-
 
2538
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
-
 
2539
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
-
 
2540
 
-
 
2541
                if (!$chatGroupUser) {
-
 
2542
                    $data = [
-
 
2543
                        'success' => false,
-
 
2544
                        'data' =>  'ERROR_ZOOM_CHAT_UNAUTHORIZE'
-
 
2545
                    ];
-
 
2546
                    return new JsonModel($data);
-
 
2547
                }
-
 
2548
            } else {
-
 
2549
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
2550
                $user = $userMapper->fetchOneByUuid($id);
-
 
2551
 
-
 
2552
                if (!$user) {
-
 
2553
                    return new JsonModel([
-
 
2554
                        'success' => false,
-
 
2555
                        'data' => 'ERROR_USER_NOT_FOUND'
-
 
2556
                    ]);
-
 
2557
                }
-
 
2558
 
-
 
2559
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
-
 
2560
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2561
 
-
 
2562
                if (!$connection || $connection->status != Connection::STATUS_ACCEPTED) {
-
 
2563
 
-
 
2564
                    return new JsonModel([
-
 
2565
                        'success' => false,
-
 
2566
                        'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
-
 
2567
                    ]);
-
 
2568
                }
-
 
2569
 
-
 
2570
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2571
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2572
 
-
 
2573
                if (!$chatUser) {
-
 
2574
                    $chatUser = new ChatUser();
-
 
2575
                    $chatUser->user_id1 = $currentUser->id;
-
 
2576
                    $chatUser->user_id2 = $user->id;
-
 
2577
                    $response = $chatUserMapper->insert($chatUser);
-
 
2578
 
-
 
2579
                    if (!$response) {
-
 
2580
                        return new JsonModel([
-
 
2581
                            'success' => false,
-
 
2582
                            'data' => $chatUserMapper->getError()
-
 
2583
                        ]);
-
 
2584
                    }
-
 
2585
 
-
 
2586
                    $chatUser = $chatUserMapper->fetchOne($chatUser->id);
-
 
2587
                    $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
-
 
2588
                    $dirpath = $fullpath_chat . $chatUser->uuid;
-
 
2589
 
-
 
2590
                    if (!file_exists($dirpath)) {
-
 
2591
                        mkdir($dirpath, 0777, true);
-
 
2592
                        chmod($dirpath, 0777);
-
 
2593
                    }
-
 
2594
                }
-
 
2595
            }
-
 
2596
 
-
 
2597
            if (!$chatUser && !$chatGroup) {
-
 
2598
                $data = [
-
 
2599
                    'success' => false,
-
 
2600
                    'data' => 'ERROR_ZOOM_CHAT_NOT_FOUND'
-
 
2601
                ];
-
 
2602
                return new JsonModel($data);
-
 
2603
            }
-
 
2604
 
-
 
2605
            $dataPost = $request->getPost()->toArray();
-
 
2606
            $form = new ZoomAddForm();
-
 
2607
            $form->setData($dataPost);
-
 
2608
 
-
 
2609
            if ($form->isValid()) {
-
 
2610
                $dataPost = (array) $form->getData();
-
 
2611
                $dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
-
 
2612
                if (!$dtStart) {
-
 
2613
                    return new JsonModel([
-
 
2614
                        'success' => false,
-
 
2615
                        'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
2616
                    ]);
-
 
2617
                }
-
 
2618
 
-
 
2619
                $dtEnd = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
-
 
2620
                $dtEnd->add(new \DateInterval('PT' . $dataPost['duration'] . 'M'));
-
 
2621
                $start_time = $dtStart->format('Y-m-d\TH:i:s');
-
 
2622
                $zoom = new Zoom($this->adapter, $this->config, $this->cache);
-
 
2623
                $response =  $zoom->getOAuthAccessToken();
-
 
2624
 
-
 
2625
                if ($response['success']) {
-
 
2626
                    $access_token = $response['data'];
-
 
2627
                    $result = $zoom->addMeeting($access_token, $dataPost['title'], $dataPost['description'], $dataPost['type'], $start_time, $dataPost['duration'], $dataPost['timezone'], $dataPost['password']);
-
 
2628
                } else {
-
 
2629
                    return new JsonModel([
-
 
2630
                        'success' => false,
-
 
2631
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
-
 
2632
                    ]);
-
 
2633
                }
-
 
2634
 
-
 
2635
                if ($result['success']) {
-
 
2636
                    $zoomMeetingMapper = ZoomMeetingMapper::getInstance($this->adapter);
-
 
2637
                    $zoomMeeting = $zoomMeetingMapper->fetchOne($result['data']['id']);
-
 
2638
 
-
 
2639
                    if (!$zoomMeeting) {
-
 
2640
                        $zoomMeeting = new ZoomMeeting();
-
 
2641
                        $zoomMeeting->id = $result['data']['id'];
-
 
2642
                        $zoomMeeting->topic = $dataPost['title'];
-
 
2643
                        $zoomMeeting->agenda = $dataPost['description'];
-
 
2644
                        $zoomMeeting->duration = $dataPost['duration'];
-
 
2645
                        $zoomMeeting->join_url = $result['data']['join_url'];
-
 
2646
                        $zoomMeeting->start_time = $dtStart->format('Y-m-d H:i:s');
-
 
2647
                        $zoomMeeting->end_time = $dtEnd->format('Y-m-d H:i:s');
-
 
2648
                        $zoomMeeting->timezone = $dataPost['timezone'];
-
 
2649
                        $zoomMeeting->type = $dataPost['type'];
-
 
2650
                        $zoomMeeting->uuid = $result['data']['uuid'];
-
 
2651
                        $zoomMeeting->password = $dataPost['password'];
-
 
2652
 
-
 
2653
                        if (!$zoomMeetingMapper->insert($zoomMeeting)) {
-
 
2654
                            return new JsonModel([
-
 
2655
                                'success' => false,
-
 
2656
                                'data' => $zoomMeetingMapper->getError()
-
 
2657
                            ]);
-
 
2658
                        }
-
 
2659
                    }
-
 
2660
 
-
 
2661
                    $chatMessageContent = "LABEL_ZOOM_MEETING \r\n" .
-
 
2662
                        " LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "\r\n" .
-
 
2663
                        " LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "\r\n" .
-
 
2664
                        " LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "\r\n" .
-
 
2665
                        " LABEL_ZOOM_MEETING_TITLE :  " . $zoomMeeting->topic  . "\r\n" .
-
 
2666
                        " LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "\r\n" .
-
 
2667
                        " LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "\r\n";
-
 
2668
                    $zoomMeetingUserMapper = ZoomMeetingUserMapper::getInstance($this->adapter);
-
 
2669
                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $currentUser->id);
-
 
2670
 
-
 
2671
                    if (!$zoomMeetingUser) {
-
 
2672
                        $zoomMeetingUser = new ZoomMeetingUser();
-
 
2673
                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2674
                        $zoomMeetingUser->user_id = $currentUser->id;
-
 
2675
                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2676
                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2677
                    }
-
 
2678
 
-
 
2679
                    if ($chatUser) {
-
 
2680
                        if ($chatUser->user_id1 == $currentUser->id) {
-
 
2681
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id2);
-
 
2682
 
-
 
2683
                            if (!$zoomMeetingUser) {
-
 
2684
                                $zoomMeetingUser = new ZoomMeetingUser();
-
 
2685
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2686
                                $zoomMeetingUser->user_id = $chatUser->user_id2;
-
 
2687
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2688
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2689
                            }
-
 
2690
                        } else {
-
 
2691
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id1);
-
 
2692
 
-
 
2693
                            if (!$zoomMeetingUser) {
-
 
2694
                                $zoomMeetingUser = new ZoomMeetingUser();
-
 
2695
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2696
                                $zoomMeetingUser->user_id = $chatUser->user_id1;
-
 
2697
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2698
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2699
                            }
-
 
2700
                        }
-
 
2701
 
-
 
2702
                        $chatMessage = new ChatMessage();
-
 
2703
                        $chatMessage->recd = ChatMessage::RECD_NO;
-
 
2704
                        $chatMessage->seen = ChatMessage::SEEN_NO;
-
 
2705
                        $chatMessage->type = ChatMessage::TYPE_TEXT;
-
 
2706
                        $chatMessage->content = $chatMessageContent;
-
 
2707
                        $chatMessage->from_id = $currentUser->id;
-
 
2708
                        $chatMessage->to_id = $chatUser->user_id1 == $currentUser->id ? $chatUser->user_id2 : $chatUser->user_id1;
-
 
2709
                        $chatMessage->chat_id = $chatUser->id;
-
 
2710
                        $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
-
 
2711
                        $chatMessageMapper->insert($chatMessage);
-
 
2712
                        $chatUserMapper->markIsOpen1($chatUser->id);
-
 
2713
                        $chatUserMapper->markIsOpen2($chatUser->id);
-
 
2714
                    } else if ($chatGroup) {
-
 
2715
 
-
 
2716
                        $chatGroupMessage = new ChatGroupMessage();
-
 
2717
                        $chatGroupMessage->group_id = $chatGroup->id;
-
 
2718
                        $chatGroupMessage->content = $chatMessageContent;
-
 
2719
                        $chatGroupMessage->sender_id = $currentUser->id;
-
 
2720
                        $chatGroupMessage->type = ChatGroupMessage::TYPE_TEXT;
-
 
2721
                        $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
-
 
2722
 
-
 
2723
                        if ($chatGroupMessageMapper->insert($chatGroupMessage)) {
-
 
2724
                            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
-
 
2725
                            $groupUsers =   $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
-
 
2726
                            $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
-
 
2727
                            foreach ($groupUsers as $groupUser) {
-
 
2728
                                if ($groupUser->user_id != $currentUser->id) {
-
 
2729
                                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $groupUser->user_id);
-
 
2730
 
-
 
2731
                                    if (!$zoomMeetingUser) {
-
 
2732
                                        $zoomMeetingUser = new ZoomMeetingUser();
-
 
2733
                                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2734
                                        $zoomMeetingUser->user_id = $groupUser->user_id;
-
 
2735
                                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2736
                                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2737
                                    }
-
 
2738
                                }
-
 
2739
 
-
 
2740
                                $chatGroupUserMessage = new ChatGroupUserMessage();
-
 
2741
                                $chatGroupUserMessage->group_id = $chatGroup->id;
-
 
2742
                                $chatGroupUserMessage->message_id = $chatGroupMessage->id;
-
 
2743
                                $chatGroupUserMessage->receiver_id = $groupUser->user_id;
-
 
2744
                                $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_NO;
-
 
2745
                                $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_NO;
-
 
2746
                                $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
-
 
2747
                                $chatGroupUserMapper->markIsOpen($groupUser->group_id, $groupUser->user_id);
-
 
2748
                            }
-
 
2749
                        }
-
 
2750
                    }
-
 
2751
 
-
 
2752
                    return new JsonModel([
-
 
2753
                        'success' => true,
-
 
2754
                        'data' => 'LABEL_ZOOM_NEW_MEETING_SUCCESSFULLY'
-
 
2755
                    ]);
-
 
2756
                } else {
-
 
2757
                    return new JsonModel([
-
 
2758
                        'success' => false,
-
 
2759
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
-
 
2760
                    ]);
-
 
2761
                }
-
 
2762
            } else {
-
 
2763
                $messages = [];
-
 
2764
                $form_messages = (array) $form->getMessages();
-
 
2765
                foreach ($form_messages  as $fieldname => $field_messages) {
-
 
2766
                    $messages[$fieldname] = array_values($field_messages);
-
 
2767
                }
-
 
2768
 
-
 
2769
                return new JsonModel([
-
 
2770
                    'success'   => false,
-
 
2771
                    'data'   => $messages
-
 
2772
                ]);
-
 
2773
 
-
 
2774
                return new JsonModel($response);
-
 
2775
            }
-
 
2776
        } else {
-
 
2777
            $response = [
-
 
2778
                'success' => false,
-
 
2779
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2780
            ];
-
 
2781
        }
-
 
2782
 
-
 
2783
        return new JsonModel($response);
-
 
2784
    }
-
 
2785
 
-
 
2786
 
-
 
2787
    public function usersAction()
-
 
2788
    {
-
 
2789
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2790
        $currentUser = $currentUserPlugin->getUser();
-
 
2791
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
-
 
2792
        $currentNetwork = $currentNetworkPlugin->getNetwork();
-
 
2793
        $request = $this->getRequest();
-
 
2794
 
-
 
2795
        if ($request->isGet()) {
-
 
2796
            $items = [];
-
 
2797
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2798
            $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
-
 
2799
 
-
 
2800
            if (strlen($search) >= 3) {
-
 
2801
                $user_ids = [];
-
 
2802
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
2803
 
-
 
2804
                if ($currentNetwork->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {
-
 
2805
 
-
 
2806
                    $connectionMapper = ConnectionMapper::getInstance($this->adapter);
-
 
2807
                    $user_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
-
 
2808
                } else {
-
 
2809
                    if ($currentNetwork->default == Network::DEFAULT_YES) {
-
 
2810
                        $user_ids = $userMapper->fetchAllIdsByDefaultNetworkId($currentNetwork->id, $currentUser->id);
-
 
2811
                    } else {
-
 
2812
                        $user_ids = $userMapper->fetchAllIdsByNonDefaultNetworkId($currentNetwork->id, $currentUser->id);
-
 
2813
                    }
-
 
2814
                }
-
 
2815
 
-
 
2816
                $items = [];
-
 
2817
                $records = $userMapper->fetchAllByIdsAndSearch($user_ids, $search, $currentUser->id);
-
 
2818
 
-
 
2819
                foreach ($records as $record) {
-
 
2820
                    $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $record->id);
-
 
2821
                    if ($chatUser) {
-
 
2822
                        $link_send = $this->url()->fromRoute('chat/send', ['id' => $record->uuid]);
-
 
2823
                    } else {
-
 
2824
                        $link_send = '';
-
 
2825
                    }
-
 
2826
 
-
 
2827
                    $link_open_or_create = $this->url()->fromRoute('chat/open-or-create', ['id' => $record->uuid]);
-
 
2828
                    array_push($items, [
-
 
2829
                        'name'  => trim($record->first_name .  '  ' . $record->last_name) . ' (' . $record->email . ')',
-
 
2830
                        'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'user', 'filename' => $record->image]),
-
 
2831
                        'link_send' => $link_send,
-
 
2832
                        'link_open_or_create' => $link_open_or_create,
-
 
2833
                    ]);
-
 
2834
                }
-
 
2835
            }
-
 
2836
 
-
 
2837
            $response = [
-
 
2838
                'success' => true,
-
 
2839
                'data' => $items
-
 
2840
            ];
-
 
2841
        } else {
-
 
2842
            $response = [
-
 
2843
                'success' => false,
-
 
2844
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2845
            ];
-
 
2846
        }
-
 
2847
 
-
 
2848
        return new JsonModel($response);
-
 
2849
    }
-
 
2850
 
-
 
2851
    public function openOrCreateAction()
-
 
2852
    {
-
 
2853
        $request    = $this->getRequest();
-
 
2854
        if ($request->isPost()) {
-
 
2855
            $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2856
            $currentUser = $currentUserPlugin->getUser();
-
 
2857
 
-
 
2858
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
-
 
2859
            $currentNetwork = $currentNetworkPlugin->getNetwork();
-
 
2860
 
-
 
2861
 
-
 
2862
            $id = filter_var($this->params()->fromRoute('id'), FILTER_SANITIZE_STRING);
-
 
2863
 
-
 
2864
            if (!$id) {
-
 
2865
                return new JsonModel([
-
 
2866
                    'success' => false,
-
 
2867
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
2868
                ]);
-
 
2869
            }
-
 
2870
 
-
 
2871
            $userMapper = UserMapper::getInstance($this->adapter);
-
 
2872
            $user = $userMapper->fetchOneByUuid($id);
-
 
2873
 
-
 
2874
            if (!$user) {
-
 
2875
                return new JsonModel([
-
 
2876
                    'success' => false,
-
 
2877
                    'data' => 'ERROR_USER_NOT_FOUND'
-
 
2878
                ]);
-
 
2879
            }
-
 
2880
 
-
 
2881
            if ($user->email_verified == User::EMAIL_VERIFIED_NO || $user->status != User::STATUS_ACTIVE) {
-
 
2882
                return new JsonModel([
-
 
2883
                    'success' => false,
-
 
2884
                    'data' => 'ERROR_USER_IS_INACTIVE'
-
 
2885
                ]);
-
 
2886
            }
-
 
2887
 
-
 
2888
            if ($user->network_id != $currentUser->network_id) {
-
 
2889
                return new JsonModel([
-
 
2890
                    'success' => false,
-
 
2891
                    'data' => 'ERROR_USER_IS_INACTIVE'
-
 
2892
                ]);
-
 
2893
            }
-
 
2894
 
-
 
2895
            if ($currentNetwork->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {
-
 
2896
 
-
 
2897
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
-
 
2898
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2899
 
-
 
2900
                if (!$connection) {
-
 
2901
                    return new JsonModel([
-
 
2902
                        'success' => false,
-
 
2903
                        'data' =>  'ERROR_CONNECTION_NOT_ACTIVE'
-
 
2904
                    ]);
-
 
2905
                }
-
 
2906
            }
-
 
2907
 
-
 
2908
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2909
            $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2910
            if ($chatUser) {
-
 
2911
                if ($currentUser->id == $chatUser->user_id1) {
-
 
2912
                    $chatUserMapper->markIsOpen1($chatUser->id);
-
 
2913
                } else {
-
 
2914
                    $chatUserMapper->markIsOpen2($chatUser->id);
-
 
2915
                }
-
 
2916
            } else {
-
 
2917
                $chatUser = new ChatUser();
-
 
2918
                $chatUser->user_id1 = $currentUser->id;
-
 
2919
                $chatUser->user_id2 = $user->id;
-
 
2920
                $chatUser->user_open1 = ChatUser::OPEN_YES;
-
 
2921
                $chatUser->user_open2 = ChatUser::OPEN_NO;
-
 
2922
 
-
 
2923
 
-
 
2924
                if (!$chatUserMapper->insert($chatUser)) {
-
 
2925
                    return new JsonModel([
-
 
2926
                        'success' => false,
-
 
2927
                        'data' =>  $chatUserMapper->getError()
-
 
2928
                    ]);
-
 
2929
                }
-
 
2930
            }
-
 
2931
 
-
 
2932
            $utilMapper = UtilMapper::getInstance($this->adapter);
-
 
2933
            $now = $utilMapper->getDatebaseNow();
-
 
2934
 
-
 
2935
            $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
-
 
2936
            $count_not_received_messages = $chatMessageMapper->countNotReceivedMessagesByChatIdAndToId($chatUser->id, $currentUser->id);
-
 
2937
            $count_not_seen_messages = $chatMessageMapper->countNotSeenMessagesByChatIdAndToId($chatUser->id, $currentUser->id);
-
 
2938
            $lastMessage = $chatMessageMapper->fetchLastMessage($chatUser->id, $currentUser->id);
-
 
2939
 
-
 
2940
            if ($lastMessage) {
-
 
2941
                $lastMessage = Functions::timeAgo($lastMessage->added_on, $now);
-
 
2942
            } else {
-
 
2943
                $lastMessage = '';
-
 
2944
            }
-
 
2945
 
-
 
2946
            if ($currentUser->id == $chatUser->user_id1) {
-
 
2947
                $is_open = $chatUser->user_open1 == ChatUser::OPEN_YES;
-
 
2948
            } else {
-
 
2949
                $is_open = $chatUser->user_open2 == ChatUser::OPEN_YES;
-
 
2950
            }
-
 
2951
 
-
 
2952
 
-
 
2953
            $not_received_messages = $count_not_received_messages > 0;
-
 
2954
            $not_seen_messages = $count_not_seen_messages > 0;
-
 
2955
 
-
 
2956
            $data = [
-
 
2957
                'url_clear'                 => $this->url()->fromRoute('chat/clear', ['id' => $user->uuid]),
-
 
2958
                'url_close'                 => $this->url()->fromRoute('chat/close', ['id' => $user->uuid]),
-
 
2959
                'url_open'                  => $this->url()->fromRoute('chat/open', ['id' => $user->uuid]),
-
 
2960
                'url_send'                  => $this->url()->fromRoute('chat/send', ['id' => $user->uuid]),
-
 
2961
                'url_upload'                => $this->url()->fromRoute('chat/upload', ['id' => $user->uuid]),
-
 
2962
                'url_mark_seen'             => $this->url()->fromRoute('chat/mark-seen', ['id' => $user->uuid]),
-
 
2963
                'url_mark_received'         => $this->url()->fromRoute('chat/mark-received', ['id' => $user->uuid]),
-
 
2964
                'url_get_all_messages'      => $this->url()->fromRoute('chat/get-all-messages', ['id' => $user->uuid]),
-
 
2965
                'url_zoom'                  => $this->url()->fromRoute('chat/zoom', ['id' => $user->uuid, 'type' => 'chat']),
-
 
2966
                'id'                        => $user->uuid,
-
 
2967
                'name'                      => trim($user->first_name . ' ' . $user->last_name),
-
 
2968
                'image'                     => $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]),
-
 
2969
                'profile'                   => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
2970
                'type'                      => 'user',
-
 
2971
                'online'                    => $user->online ? 1 : 0,
-
 
2972
                'is_open'                   => $is_open ? 1 : 0,
-
 
2973
                'not_seen_messages'         => $not_seen_messages,
-
 
2974
                'not_received_messages'     => $not_received_messages,
-
 
2975
                'count_not_seen_messages'       => $count_not_seen_messages,
-
 
2976
                'count_not_received_messages'   => $count_not_received_messages,
-
 
2977
                'last_message'                  => $lastMessage
-
 
2978
            ];
-
 
2979
 
-
 
2980
 
-
 
2981
 
-
 
2982
            $userMapper->updateLastActivity($currentUser->id);
-
 
2983
 
-
 
2984
            return new JsonModel([
-
 
2985
                'success' => true,
-
 
2986
                'data' => $data,
-
 
2987
            ]);
-
 
2988
        } else {
-
 
2989
            return new JsonModel([
-
 
2990
                'success' => false,
-
 
2991
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2992
            ]);
-
 
2993
        }
2506
    }
2994
    }