Proyectos de Subversion LeadersLinked - Backend

Rev

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

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