Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev 16182 Rev 16247
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;
-
 
6
 
-
 
7
use Laminas\Db\Adapter\AdapterInterface;
5
namespace LeadersLinked\Controller;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
6
 
9
use Laminas\Mvc\Controller\AbstractActionController;
7
use LeadersLinked\Library\Zoom;
-
 
8
use Laminas\Log\LoggerInterface;
-
 
9
use Laminas\View\Model\JsonModel;
-
 
10
use Laminas\View\Model\ViewModel;
10
use Laminas\Log\LoggerInterface;
11
use LeadersLinked\Model\ChatUser;
11
use Laminas\View\Model\JsonModel;
12
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;
13
use LeadersLinked\Model\Connection;
18
use LeadersLinked\Mapper\ChatGroupMessageMapper;
14
use LeadersLinked\Library\Functions;
-
 
15
use LeadersLinked\Mapper\UserMapper;
-
 
16
use LeadersLinked\Mapper\UtilMapper;
-
 
17
use LeadersLinked\Model\ChatMessage;
-
 
18
use LeadersLinked\Model\ZoomMeeting;
-
 
19
use LeadersLinked\Model\ChatGroupUser;
-
 
20
use Laminas\Db\Adapter\AdapterInterface;
-
 
21
use LeadersLinked\Form\Chat\ZoomAddForm;
19
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
22
use LeadersLinked\Mapper\ChatUserMapper;
20
use LeadersLinked\Mapper\ChatUserMapper;
-
 
21
use LeadersLinked\Model\ChatMessage;
23
use LeadersLinked\Model\ZoomMeetingUser;
22
use LeadersLinked\Model\ChatGroupMessage;
-
 
23
use LeadersLinked\Model\ChatGroupUserMessage;
-
 
24
use LeadersLinked\Model\Connection;
24
use LeadersLinked\Mapper\ChatGroupMapper;
-
 
25
use LeadersLinked\Model\ChatGroupMessage;
-
 
26
use LeadersLinked\Mapper\ConnectionMapper;
25
use LeadersLinked\Model\ChatGroup;
27
use LeadersLinked\Form\CreateChatGroupForm;
26
use LeadersLinked\Model\ChatUser;
28
use LeadersLinked\Mapper\ChatMessageMapper;
27
use LeadersLinked\Form\CreateChatGroupForm;
29
use LeadersLinked\Mapper\ZoomMeetingMapper;
-
 
30
use LeadersLinked\Mapper\ChatGroupUserMapper;
-
 
31
use LeadersLinked\Model\ChatGroupUserMessage;
-
 
32
use LeadersLinked\Mapper\ZoomMeetingUserMapper;
-
 
33
use LeadersLinked\Mapper\ChatGroupMessageMapper;
Línea 28... Línea 34...
28
use LeadersLinked\Mapper\ChatGroupUserMapper;
34
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
29
use LeadersLinked\Model\ChatGroupUser;
35
use Laminas\Mvc\Controller\AbstractActionController;
30
use LeadersLinked\Mapper\UtilMapper;
36
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
Línea 2502... Línea 2508...
2502
            return true;
2508
            return true;
2503
        }
2509
        }
Línea 2504... Línea 2510...
2504
 
2510
 
2505
        return ($diff->s) > 15 ? true : false;
2511
        return ($diff->s) > 15 ? true : false;
-
 
2512
    }
-
 
2513
 
-
 
2514
    public function zoomAction()
-
 
2515
    {
-
 
2516
        $request = $this->getRequest();
-
 
2517
        if ($request->isPost()) {
-
 
2518
            $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
2519
            $currentUser = $currentUserPlugin->getUser();
-
 
2520
            $id = $this->params()->fromRoute('id');
-
 
2521
 
-
 
2522
            if (!$id) {
-
 
2523
                return new JsonModel([
-
 
2524
                    'success' => false,
-
 
2525
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
2526
                ]);
-
 
2527
            }
-
 
2528
 
-
 
2529
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2530
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
-
 
2531
            $chatUser = null;
-
 
2532
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
-
 
2533
 
-
 
2534
            if ($chatGroup) {
-
 
2535
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
-
 
2536
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
-
 
2537
 
-
 
2538
                if (!$chatGroupUser) {
-
 
2539
                    $data = [
-
 
2540
                        'success' => false,
-
 
2541
                        'data' =>  'ERROR_ZOOM_CHAT_UNAUTHORIZE'
-
 
2542
                    ];
-
 
2543
                    return new JsonModel($data);
-
 
2544
                }
-
 
2545
            } else {
-
 
2546
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
2547
                $user = $userMapper->fetchOneByUuid($id);
-
 
2548
 
-
 
2549
                if (!$user) {
-
 
2550
                    return new JsonModel([
-
 
2551
                        'success' => false,
-
 
2552
                        'data' => 'ERROR_USER_NOT_FOUND'
-
 
2553
                    ]);
-
 
2554
                }
-
 
2555
 
-
 
2556
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
-
 
2557
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2558
 
-
 
2559
                if (!$connection || $connection->status != Connection::STATUS_ACCEPTED) {
-
 
2560
 
-
 
2561
                    return new JsonModel([
-
 
2562
                        'success' => false,
-
 
2563
                        'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
-
 
2564
                    ]);
-
 
2565
                }
-
 
2566
 
-
 
2567
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
-
 
2568
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
2569
 
-
 
2570
                if (!$chatUser) {
-
 
2571
                    $chatUser = new ChatUser();
-
 
2572
                    $chatUser->user_id1 = $currentUser->id;
-
 
2573
                    $chatUser->user_id2 = $user->id;
-
 
2574
                    $response = $chatUserMapper->insert($chatUser);
-
 
2575
 
-
 
2576
                    if (!$response) {
-
 
2577
                        return new JsonModel([
-
 
2578
                            'success' => false,
-
 
2579
                            'data' => $chatUserMapper->getError()
-
 
2580
                        ]);
-
 
2581
                    }
-
 
2582
 
-
 
2583
                    $chatUser = $chatUserMapper->fetchOne($chatUser->id);
-
 
2584
                    $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
-
 
2585
                    $dirpath = $fullpath_chat . $chatUser->uuid;
-
 
2586
 
-
 
2587
                    if (!file_exists($dirpath)) {
-
 
2588
                        mkdir($dirpath, 0777, true);
-
 
2589
                        chmod($dirpath, 0777);
-
 
2590
                    }
-
 
2591
                }
-
 
2592
            }
-
 
2593
 
-
 
2594
            if (!$chatUser && !$chatGroup) {
-
 
2595
                $data = [
-
 
2596
                    'success' => false,
-
 
2597
                    'data' => 'ERROR_ZOOM_CHAT_NOT_FOUND'
-
 
2598
                ];
-
 
2599
                return new JsonModel($data);
-
 
2600
            }
-
 
2601
 
-
 
2602
            $dataPost = $request->getPost()->toArray();
-
 
2603
            $form = new ZoomAddForm();
-
 
2604
            $form->setData($dataPost);
-
 
2605
 
-
 
2606
            if ($form->isValid()) {
-
 
2607
                $dataPost = (array) $form->getData();
-
 
2608
                $dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
-
 
2609
                if (!$dtStart) {
-
 
2610
                    return new JsonModel([
-
 
2611
                        'success' => false,
-
 
2612
                        'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
2613
                    ]);
-
 
2614
                }
-
 
2615
 
-
 
2616
                $dtEnd = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
-
 
2617
                $dtEnd->add(new \DateInterval('PT' . $dataPost['duration'] . 'M'));
-
 
2618
                $start_time = $dtStart->format('Y-m-d\TH:i:s');
-
 
2619
                $zoom = new Zoom($this->adapter, $this->config, $this->cache);
-
 
2620
                $response =  $zoom->getOAuthAccessToken();
-
 
2621
 
-
 
2622
                if ($response['success']) {
-
 
2623
                    $access_token = $response['data'];
-
 
2624
                    $result = $zoom->addMeeting($access_token, $dataPost['title'], $dataPost['description'], $dataPost['type'], $start_time, $dataPost['duration'], $dataPost['timezone'], $dataPost['password']);
-
 
2625
                } else {
-
 
2626
                    return new JsonModel([
-
 
2627
                        'success' => false,
-
 
2628
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
-
 
2629
                    ]);
-
 
2630
                }
-
 
2631
 
-
 
2632
                if ($result['success']) {
-
 
2633
                    $zoomMeetingMapper = ZoomMeetingMapper::getInstance($this->adapter);
-
 
2634
                    $zoomMeeting = $zoomMeetingMapper->fetchOne($result['data']['id']);
-
 
2635
 
-
 
2636
                    if (!$zoomMeeting) {
-
 
2637
                        $zoomMeeting = new ZoomMeeting();
-
 
2638
                        $zoomMeeting->id = $result['data']['id'];
-
 
2639
                        $zoomMeeting->topic = $dataPost['title'];
-
 
2640
                        $zoomMeeting->agenda = $dataPost['description'];
-
 
2641
                        $zoomMeeting->duration = $dataPost['duration'];
-
 
2642
                        $zoomMeeting->join_url = $result['data']['join_url'];
-
 
2643
                        $zoomMeeting->start_time = $dtStart->format('Y-m-d H:i:s');
-
 
2644
                        $zoomMeeting->end_time = $dtEnd->format('Y-m-d H:i:s');
-
 
2645
                        $zoomMeeting->timezone = $dataPost['timezone'];
-
 
2646
                        $zoomMeeting->type = $dataPost['type'];
-
 
2647
                        $zoomMeeting->uuid = $result['data']['uuid'];
-
 
2648
                        $zoomMeeting->password = $dataPost['password'];
-
 
2649
 
-
 
2650
                        if (!$zoomMeetingMapper->insert($zoomMeeting)) {
-
 
2651
                            return new JsonModel([
-
 
2652
                                'success' => false,
-
 
2653
                                'data' => $zoomMeetingMapper->getError()
-
 
2654
                            ]);
-
 
2655
                        }
-
 
2656
                    }
-
 
2657
 
-
 
2658
                    $chatMessageContent = "LABEL_ZOOM_MEETING \r\n" .
-
 
2659
                        " LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "\r\n" .
-
 
2660
                        " LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "\r\n" .
-
 
2661
                        " LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "\r\n" .
-
 
2662
                        " LABEL_ZOOM_MEETING_TITLE :  " . $zoomMeeting->topic  . "\r\n" .
-
 
2663
                        " LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "\r\n" .
-
 
2664
                        " LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "\r\n";
-
 
2665
                    $zoomMeetingUserMapper = ZoomMeetingUserMapper::getInstance($this->adapter);
-
 
2666
                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $currentUser->id);
-
 
2667
 
-
 
2668
                    if (!$zoomMeetingUser) {
-
 
2669
                        $zoomMeetingUser = new ZoomMeetingUser();
-
 
2670
                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2671
                        $zoomMeetingUser->user_id = $currentUser->id;
-
 
2672
                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2673
                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2674
                    }
-
 
2675
 
-
 
2676
                    if ($chatUser) {
-
 
2677
                        if ($chatUser->user_id1 == $currentUser->id) {
-
 
2678
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id2);
-
 
2679
 
-
 
2680
                            if (!$zoomMeetingUser) {
-
 
2681
                                $zoomMeetingUser = new ZoomMeetingUser();
-
 
2682
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2683
                                $zoomMeetingUser->user_id = $chatUser->user_id2;
-
 
2684
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2685
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2686
                            }
-
 
2687
                        } else {
-
 
2688
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id1);
-
 
2689
 
-
 
2690
                            if (!$zoomMeetingUser) {
-
 
2691
                                $zoomMeetingUser = new ZoomMeetingUser();
-
 
2692
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2693
                                $zoomMeetingUser->user_id = $chatUser->user_id1;
-
 
2694
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2695
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2696
                            }
-
 
2697
                        }
-
 
2698
 
-
 
2699
                        $chatMessage = new ChatMessage();
-
 
2700
                        $chatMessage->recd = ChatMessage::RECD_NO;
-
 
2701
                        $chatMessage->seen = ChatMessage::SEEN_NO;
-
 
2702
                        $chatMessage->type = ChatMessage::TYPE_TEXT;
-
 
2703
                        $chatMessage->content = $chatMessageContent;
-
 
2704
                        $chatMessage->from_id = $currentUser->id;
-
 
2705
                        $chatMessage->to_id = $chatUser->user_id1 == $currentUser->id ? $chatUser->user_id2 : $chatUser->user_id1;
-
 
2706
                        $chatMessage->chat_id = $chatUser->id;
-
 
2707
                        $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
-
 
2708
                        $chatMessageMapper->insert($chatMessage);
-
 
2709
                        $chatUserMapper->markIsOpen1($chatUser->id);
-
 
2710
                        $chatUserMapper->markIsOpen2($chatUser->id);
-
 
2711
                    } else if ($chatGroup) {
-
 
2712
 
-
 
2713
                        $chatGroupMessage = new ChatGroupMessage();
-
 
2714
                        $chatGroupMessage->group_id = $chatGroup->id;
-
 
2715
                        $chatGroupMessage->content = $chatMessageContent;
-
 
2716
                        $chatGroupMessage->sender_id = $currentUser->id;
-
 
2717
                        $chatGroupMessage->type = ChatGroupMessage::TYPE_TEXT;
-
 
2718
                        $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
-
 
2719
 
-
 
2720
                        if ($chatGroupMessageMapper->insert($chatGroupMessage)) {
-
 
2721
                            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
-
 
2722
                            $groupUsers =   $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
-
 
2723
                            $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
-
 
2724
                            foreach ($groupUsers as $groupUser) {
-
 
2725
                                if ($groupUser->user_id != $currentUser->id) {
-
 
2726
                                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $groupUser->user_id);
-
 
2727
 
-
 
2728
                                    if (!$zoomMeetingUser) {
-
 
2729
                                        $zoomMeetingUser = new ZoomMeetingUser();
-
 
2730
                                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
-
 
2731
                                        $zoomMeetingUser->user_id = $groupUser->user_id;
-
 
2732
                                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
-
 
2733
                                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
-
 
2734
                                    }
-
 
2735
                                }
-
 
2736
 
-
 
2737
                                $chatGroupUserMessage = new ChatGroupUserMessage();
-
 
2738
                                $chatGroupUserMessage->group_id = $chatGroup->id;
-
 
2739
                                $chatGroupUserMessage->message_id = $chatGroupMessage->id;
-
 
2740
                                $chatGroupUserMessage->receiver_id = $groupUser->user_id;
-
 
2741
                                $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_NO;
-
 
2742
                                $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_NO;
-
 
2743
                                $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
-
 
2744
                                $chatGroupUserMapper->markIsOpen($groupUser->group_id, $groupUser->user_id);
-
 
2745
                            }
-
 
2746
                        }
-
 
2747
                    }
-
 
2748
 
-
 
2749
                    return new JsonModel([
-
 
2750
                        'success' => true,
-
 
2751
                        'data' => 'LABEL_ZOOM_NEW_MEETING_SUCCESSFULLY'
-
 
2752
                    ]);
-
 
2753
                } else {
-
 
2754
                    return new JsonModel([
-
 
2755
                        'success' => false,
-
 
2756
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
-
 
2757
                    ]);
-
 
2758
                }
-
 
2759
            } else {
-
 
2760
                $messages = [];
-
 
2761
                $form_messages = (array) $form->getMessages();
-
 
2762
                foreach ($form_messages  as $fieldname => $field_messages) {
-
 
2763
                    $messages[$fieldname] = array_values($field_messages);
-
 
2764
                }
-
 
2765
 
-
 
2766
                return new JsonModel([
-
 
2767
                    'success'   => false,
-
 
2768
                    'data'   => $messages
-
 
2769
                ]);
-
 
2770
 
-
 
2771
                return new JsonModel($response);
-
 
2772
            }
-
 
2773
        } else {
-
 
2774
            $response = [
-
 
2775
                'success' => false,
-
 
2776
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
2777
            ];
-
 
2778
        }
-
 
2779
 
-
 
2780
        return new JsonModel($response);
2506
    }
2781
    }