Rev 4700 | Rev 5205 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Cache\Storage\Adapter\AbstractAdapter;use Laminas\Mvc\Controller\AbstractActionController;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\CalendarEventMapper;use LeadersLinked\Mapper\CompanyFollowerMapper;use LeadersLinked\Mapper\JobDescriptionMapper;use LeadersLinked\Mapper\PerformanceEvaluationFormMapper;use LeadersLinked\Mapper\PerformanceEvaluationTestMapper;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\ZoomMeetingMapper;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\UserPasswordMapper;use LeadersLinked\Form\AccountSetting\NotificationSettingForm;use LeadersLinked\Mapper\UserNotificationSettingMapper;use LeadersLinked\Form\AccountSetting\ChangePasswordForm;use LeadersLinked\Form\AccountSetting\ChangeImageForm;use LeadersLinked\Library\Image;use LeadersLinked\Form\AccountSetting\LocationForm;use LeadersLinked\Model\CalendarEvent;use LeadersLinked\Model\Location;use LeadersLinked\Model\PerformanceEvaluationTest;use LeadersLinked\Model\User;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Form\AccountSetting\PrivacySettingForm;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Form\AccountSetting\BasicForm;use LeadersLinked\Mapper\ConnectionMapper;use LeadersLinked\Mapper\ProfileVisitMapper;use LeadersLinked\Mapper\GroupMemberMapper;use LeadersLinked\Model\GroupMember;use LeadersLinked\Mapper\UserExperienceMapper;use LeadersLinked\Model\UserExperience;use LeadersLinked\Mapper\GroupMapper;use LeadersLinked\Model\Group;use Laminas\Db\Sql\Expression;use LeadersLinked\Mapper\CompanyUserMapper;use LeadersLinked\Model\CompanyUser;use LeadersLinked\Model\UserType;use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;use LeadersLinked\Model\Notification;use LeadersLinked\Mapper\NotificationMapper;use LeadersLinked\Mapper\EmailTemplateMapper;use LeadersLinked\Model\EmailTemplate;use LeadersLinked\Library\QueueEmail;use LeadersLinked\Mapper\PostMapper;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Model\Company;use LeadersLinked\Model\Connection;use Laminas\Navigation\Navigation;class HelperController extends AbstractActionController{/**** @var AdapterInterface*/private $adapter;/**** @var AbstractAdapter*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var array*/private $navigation;/**** @param AdapterInterface $adapter* @param AbstractAdapter $cache* @param LoggerInterface $logger* @param array $config* @param array $navigation*/public function __construct($adapter, $cache , $logger, $config, $navigation){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->navigation = $navigation;}/*** Recuperamos las personas que pueda conocer* tiene que enviarse un petición GET a la siguiente url: /helpers/people-you-may-know* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del usuario encriptado',* 'name' => 'nombre del usuario',* 'image' => 'imagen del usuario',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function peopleYouMayKnowAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$connectionMapper = ConnectionMapper::getInstance($this->adapter);$first_degree_connections_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);$first_degree_connections_ids = $first_degree_connections_ids ? $first_degree_connections_ids : [0];$second_degree_connections_ids = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);$second_degree_connections_ids = $second_degree_connections_ids ? $second_degree_connections_ids : [0];/*Usuarios de la empresas donde trabajo o soy dueño */$company_user_ids = [];$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$records = $companyUserMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){if($record->status != CompanyUser::STATUS_ACCEPTED) {continue;}$otherUsers = $companyUserMapper->fetchAllByCompanyId($record->company_id);foreach($otherUsers as $otherUser){if($currentUser->id != $otherUser->user_id && $otherUser->creator == CompanyUser::CREATOR_NO && $otherUser->status == CompanyUser::STATUS_ACCEPTED) {if(!in_array($otherUser->user_id, $company_user_ids)) {array_push($company_user_ids, $otherUser->user_id);}}}}$company_user_ids = $company_user_ids ? $company_user_ids : [0];/* Usuario de los grupos donde soy dueño o participo */$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$group_member_ids = [];$records = $groupMemberMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){if($record->status != GroupMember::STATUS_ACCEPTED) {continue;}$otherUsers = $groupMemberMapper->fetchAllByGroupId($record->group_id);foreach($otherUsers as $otherUser){if($currentUser->id != $otherUser->user_id && $otherUser->status == GroupMember::STATUS_ACCEPTED) {if(!in_array($otherUser->user_id, $group_member_ids)) {array_push($group_member_ids, $otherUser->user_id);}}}}$group_member_ids = $group_member_ids ? $group_member_ids : [0];/* Usuarios con que comparto capsulas */$capsule_user_ids = [];$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);$company_ids = [];$records = $capsuleUserMapper->fetchAllActiveByUserId($currentUser->id);foreach($records as $record){if(!in_array($record->company_id,$company_ids)) {array_push($company_ids, $record->company_id);}}foreach($company_ids as $company_id){$otherUsers = $capsuleUserMapper->fetchAllUserIdsForCapsulesActiveByCompanyId($company_id);foreach($otherUsers as $user_id){if($currentUser->id != $user_id ) {if(!in_array($user_id, $capsule_user_ids)) {array_push($capsule_user_ids, $user_id);}}}}$capsule_user_ids = $capsule_user_ids ? $capsule_user_ids : [0];$other_users = array_unique(array_merge($second_degree_connections_ids,$company_user_ids,$group_member_ids,$capsule_user_ids));$items = [];$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'first_name','last_name', 'image']);$select->from(['u' => UserMapper::_TABLE]);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('u.id', $other_users);$select->where->notIn('u.id', $first_degree_connections_ids);$select->where->notEqualTo('u.id', $currentUser->id);$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->where->in('u.usertype_id', [UserType::ADMIN, UserType::USER]);$select->order(['first_name','last_name']);//echo $select->getSqlString($this->adapter->platform); exit;$records = $queryMapper->fetchAll($select);foreach($records as $record){$relation = [];if(in_array($record['id'], $second_degree_connections_ids)) {array_push($relation, 'LABEL_RELATION_TYPE_SECOND_GRADE');}if(in_array($record['id'], $company_user_ids)) {array_push($relation, 'LABEL_RELATION_TYPE_COMPANY_USER');}if(in_array($record['id'], $group_member_ids)) {array_push($relation, 'LABEL_RELATION_TYPE_GROUP_MEMBER');}if(in_array($record['id'], $capsule_user_ids)) {array_push($relation, 'LABEL_RELATION_TYPE_CAPSULE_USER');}$connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $record['id']);$item = ['id' => $record['uuid'],'name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),'relation' => $relation,'link_cancel' => '','link_request' => '',];if($connection) {switch($connection->status){case Connection::STATUS_SENT :$item['link_cancel'] = $this->url()->fromRoute('connection/delete',['id' => $record['uuid'] ]);break;case Connection::STATUS_ACCEPTED :$item['link_cancel'] = $this->url()->fromRoute('connection/cancel',['id' => $record['uuid'] ]);break;default :$item['link_request'] = $this->url()->fromRoute('connection/request',['id' => $record['uuid'] ]);break;}} else {$item['link_request'] = $this->url()->fromRoute('connection/request',['id' => $record['uuid'] ]);}array_push($items, $item);}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/*** Recuperamos las personas que pueda conocer* tiene que enviarse un petición GET a la siguiente url: /helpers/people-viewed-profile/:user_profile_id* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del usuario encriptado',* 'name' => 'nombre del usuario',* 'image' => 'imagen del usuario',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function peopleViewedProfileAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$items = [];$user_profile_id = $this->params()->fromRoute('user_profile_id');$items = [];$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select(ProfileVisitMapper::_TABLE);$select->columns(['user_id' => new Expression('DISTINCT(visitor_id)')]);$select->where->equalTo('user_profile_id', $user_profile_id);$records = $mapper->fetchAll($select);if($records) {$user_ids = [];foreach($records as $record){array_push($user_ids, $record['user_id']);}$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select( UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);$select->where->in('id', $user_ids);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->equalTo('status',User::STATUS_ACTIVE);$select->order(['last_name ASC', 'first_name ASC']);$records = $mapper->fetchAll($select);foreach($records as $record){array_push($items, ['id' => $record['uuid'],'name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),]);}}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/*** Recuperamos los seguidores de la empresa* tiene que enviarse un petición GET a la siguiente url: /helpers/company-follower/:company_id* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del usuario encriptado',* 'name' => 'nombre del usuario',* 'image' => 'imagen del usuario',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function companyFollowerAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$company_uuid = $this->params()->fromRoute('company_id');$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOneByUuidAndNetworkId($company_uuid, $currentUser->network_id);$items = [];if($company && $company->status == Company::STATUS_ACTIVE) {//print_r($company);$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);$records = $companyFollowerMapper->fetchAllByCompanyId($company->id);$ids = [];foreach($records as $record){if(!in_array($record->follower_id, $ids)) {array_push($ids, $record->follower_id);}}//print_r($records);if($ids) {$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select(UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('id',$ids);$select->where->equalTo('status',User::STATUS_ACTIVE);$select->order(['last_name','first_name']);//echo $select->getSqlString($this->adapter->platform); exit;$records = $mapper->fetchAll($select);foreach($records as $record){array_push($items, ['id' => $record['uuid'],'name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),]);}}}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function companySuggestionAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$company_uuid = $this->params()->fromRoute('company_id');$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOneByUuidAndNetworkId($company_uuid, $currentUser->network_id);$items = [];if($company && $company->status == Company::STATUS_ACTIVE) {$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select(CompanyMapper::_TABLE);$select->columns(['id', 'uuid', 'name', 'image']);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->notEqualTo('id', $company->id);$select->where->equalTo('status',Company::STATUS_ACTIVE);$select->where->equalTo('industry_id', $company->industry_id);// $select->where->equalTo('company_size_id', $company->company_size_id);$select->order(['name']);//echo $select->getSqlString($this->adapter->platform); exit;$records = $mapper->fetchAll($select);foreach($records as $record){array_push($items, ['id' => $record['uuid'],'name' => trim($record['name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'company', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),]);}}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/*** Recuperamos los miembros del grupo* tiene que enviarse un petición GET a la siguiente url: /helpers/group-members/:group_id* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del usuario encriptado',* 'name' => 'nombre del usuario',* 'image' => 'imagen del usuario',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function groupMembersAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if($request->isGet()) {$group_uuid = $this->params()->fromRoute('group_id');$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($group_uuid, $currentUser->network_id);$items = [];if($group && $group->status == Group::STATUS_ACTIVE) {$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select();$select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);$select->from(['u' => UserMapper::_TABLE]);$select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.user_id = u.id ', ['user_id', 'status']);$select->join(['g' => GroupMapper::_TABLE], 'gm.group_id = g.id', ['group_uuid' => 'uuid'] );$select->where->equalTo('u.network_id', $currentUser->network_id);$select->where->equalTo('g.network_id', $currentUser->network_id);$select->where->equalTo('g.uuid', $group_uuid);if($group->user_id == $currentUser->id) {$select->where->in('gm.status', [GroupMember::STATUS_ACCEPTED,GroupMember::STATUS_ADDED_BY_ADMIN,GroupMember::STATUS_AUTO_JOIN,GroupMember::STATUS_JOINING_REQUESTED,]);} else {$select->where->in('gm.status', [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);}$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->order(['last_name', 'first_name']);//echo $select->getSqlString($this->adapter->platform);$records = $mapper->fetchAll($select);foreach($records as $record){$actions = [];if($group->user_id == $currentUser->id) {if($record['id'] != $currentUser->id) {switch($record['status']){case GroupMember::STATUS_JOINING_REQUESTED :$actions['link_approve'] = $this->url()->fromRoute('helpers/group-members/approve', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);$actions['link_reject'] = $this->url()->fromRoute('helpers/group-members/reject', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);break;case GroupMember::STATUS_ACCEPTED :case GroupMember::STATUS_AUTO_JOIN :case GroupMember::STATUS_ADDED_BY_ADMIN :$actions['link_cancel'] = $this->url()->fromRoute('helpers/group-members/cancel', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);break;}}}array_push($items, ['id' => $record['uuid'],'name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('profile/view', ['id' => $record['uuid']]),'actions' => $actions,]);}}return new JsonModel(['success' => true,'data' => ['items' => $items,'link_invite' => $group->user_id == $currentUser->id ? $this->url()->fromRoute('helpers/group-members/invite',['group_id' => $group->uuid]) : '',]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function groupMemberInviteAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$group_uuid = $this->params()->fromRoute('group_id');$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($group_uuid, $currentUser->network_id);if(!$group) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_NOT_FOUND']);}if($group->status != Group::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_ACTIVE']);}if($currentUser->id != $group->user_id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$request = $this->getRequest();if($request->isGet()) {$search = filter_var($this->params()->fromQuery('search', ''));if(strlen($search) >= 3) {$userMapper = UserMapper::getInstance($this->adapter);$records = $userMapper->fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group->id, $currentUser->network_id, $search);$users = [];foreach($records as $record){array_push($users, ['value' => $record->uuid,'text' => trim($record->first_name . ' ' . $record->last_name) . ' (' . $record->email . ')']);}return new JsonModel(['success' => true,'data' => $users]);} else {return new JsonModel(['success' => true,'data' => []]);}}else if($request->isPost()) {$uuid = $this->params()->fromPost('id');if(!$uuid) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}if($user->status != User::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_IS_INACTIVE']);}if($group->user_id == $user->id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);if($groupMember) {$result = false;switch($groupMember->status){case GroupMember::STATUS_ACCEPTED:case GroupMember::STATUS_AUTO_JOIN:return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_MEMBER',]);break;case $groupMember->status == GroupMember::STATUS_REJECTED :case $groupMember->status == GroupMember::STATUS_CANCELLED :$groupMember->status = GroupMember::STATUS_ADDED_BY_ADMIN;$groupMember->joining_request_on = date('H-m-d H:i:s');$result = $groupMemberMapper->update($groupMember);break;case GroupMember::STATUS_ADDED_BY_ADMIN :case GroupMember::STATUS_JOINING_REQUESTED :return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_A_PENDING_REQUEST']);break;default :return new JsonModel(['success' => false,'data' => 'ERROR_UNKNOWN_OPERATION']);break;}} else {$groupMember = new GroupMember();$groupMember->user_id = $user->id;$groupMember->group_id = $group->id;$groupMember->status = GroupMember::STATUS_ADDED_BY_ADMIN;$groupMember->joining_request_on = date('H-m-d H:i:s');$result = $groupMemberMapper->insert($groupMember);}if($result) {$notification = new Notification();$notification->type = Notification::TYPE_RECEIVE_INVITATION_GROUP;$notification->read = Notification::NO;$notification->user_id = $user->id;$notification->group_id = $group->id;$notification->message = 'LABEL_NOTIFICATION_RECEIVE_INVITATION_GROUP';$notification->url = $this->url()->fromRoute('group/view',['id' => $group->uuid]);$notificationMapper = NotificationMapper::getInstance($this->adapter);$notificationMapper->insert($notification);$userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);$userNotification = $userNotificationMapper->fetchOne($user->id);if($userNotification && $userNotification->receive_invitation_group){$emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);$emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_RECEIVE_INVITATION_GROUP, $currentUser->network_id);if($emailTemplate) {$arrayCont = ['firstname' => $currentUser->first_name,'lastname' => $currentUser->last_name,'other_user_firstname' => $user->first_name,'other_user_lastname' => $user->last_name,'company_name' => '','group_name' => $group->name,'content' => '','code' => '','link' => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])];$email = new QueueEmail($this->adapter);$email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));}}return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_REQUEST_SUCCESS']);} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_REQUEST_COULD_NOT_BE_SENT']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function groupMemberCancelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if($request->isPost()) {$group_uuid = $this->params()->fromRoute('group_id');$user_uuid = $this->params()->fromRoute('user_id');$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($group_uuid, $currentUser->network_id);if(!$group) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_NOT_FOUND']);}if($group->status != Group::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_ACTIVE']);}if($currentUser->id != $group->user_id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($user_uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}if($user->id == $currentUser->id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);if($groupMember) {if($groupMember->status == GroupMember::STATUS_ACCEPTED ||$groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN ||$groupMember->status == GroupMember::STATUS_AUTO_JOIN) {$groupMember->status = GroupMember::STATUS_CANCELLED;if($groupMemberMapper->update($groupMember)) {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_CANCELLED_SUCCESS']);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_CANCELLED_FAILED']);}}}return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_REQUEST_OR_MEMBER_NOT_FOUND_TO_CANCEL']);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function groupMemberRejectAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if($request->isPost()) {$group_uuid = $this->params()->fromRoute('group_id');$user_uuid = $this->params()->fromRoute('user_id');$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($group_uuid, $currentUser->network_id);if(!$group) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_NOT_FOUND']);}if($group->status != Group::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_ACTIVE']);}if($currentUser->id != $group->user_id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($user_uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}if($user->id == $currentUser->id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);if($groupMember) {if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {$groupMember->status = GroupMember::STATUS_REJECTED;if($groupMemberMapper->update($groupMember)) {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_REJECTED_SUCCESS']);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_REJECTED_FAILED']);}}}return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_REJECT']);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function groupMemberApproveAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if($request->isPost()) {$group_uuid = $this->params()->fromRoute('group_id');$user_uuid = $this->params()->fromRoute('user_id');$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($group_uuid, $currentUser->network_id);if(!$group) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_NOT_FOUND']);}if($group->status != Group::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_ACTIVE']);}if($currentUser->id != $group->user_id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($user_uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}if($user->id == $currentUser->id) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);if($groupMember) {if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {$groupMember->status = GroupMember::STATUS_ACCEPTED;if($groupMemberMapper->update($groupMember)) {$notification = new Notification();$notification->type = Notification::TYPE_ACCEPT_MY_REQUEST_JOIN_GROUP;$notification->read = Notification::NO;$notification->user_id = $user->id;$notification->group_id = $group->id;$notification->message = 'LABEL_NOTIFICATION_ACCEPT_MY_REQUEST_JOIN_GROUP';$notification->url = $this->url()->fromRoute('group/view', ['id' => $group->uuid]);$notificationMapper = NotificationMapper::getInstance($this->adapter);$notificationMapper->insert($notification);$userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);$userNotification = $userNotificationMapper->fetchOne($user->id);if($userNotification && $userNotification->receive_invitation_group){$emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);$emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_ACCEPT_MY_REQUEST_JOIN_GROUP, $currentUser->network_id);if($emailTemplate) {$arrayCont = ['firstname' => $currentUser->first_name,'lastname' => $currentUser->last_name,'other_user_firstname' => $user->first_name,'other_user_lastname' => $user->last_name,'company_name' => '','group_name' => $group->name,'content' => '','code' => '','link' => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])];$email = new QueueEmail($this->adapter);$email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));}}return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_APPROVED_SUCCESS']);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_MEMBER_APPROVED_FAILED']);}}}return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_APPROVED']);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/*** Recuperamos los grupos sugeridos* tiene que enviarse un petición GET a la siguiente url: /helpers/groups-suggestion/:group_id* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del grupo encriptado',* 'name' => 'nombre del grupo',* 'image' => 'imagen del grupo',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function groupsSuggestionAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$connectionMapper = ConnectionMapper::getInstance($this->adapter);$first_degree_connections_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);$first_degree_connections_ids = $first_degree_connections_ids ? $first_degree_connections_ids : [0];$second_degree_connections_ids = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);$second_degree_connections_ids = $second_degree_connections_ids ? $second_degree_connections_ids : [0];/*Usuarios de la empresas donde trabajo o soy dueño */$company_user_ids = [];$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$records = $companyUserMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){if($record->status != CompanyUser::STATUS_ACCEPTED) {continue;}$otherUsers = $companyUserMapper->fetchAllByCompanyId($record->company_id);foreach($otherUsers as $otherUser){if($currentUser->id != $otherUser->user_id && $otherUser->creator == CompanyUser::CREATOR_NO && $otherUser->status == CompanyUser::STATUS_ACCEPTED) {if(!in_array($otherUser->user_id, $company_user_ids)) {array_push($company_user_ids, $otherUser->user_id);}}}}$company_user_ids = $company_user_ids ? $company_user_ids : [0];/* Usuario de los grupos donde soy dueño o participo */$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$group_member_ids = [];$records = $groupMemberMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){if($record->status != GroupMember::STATUS_ACCEPTED) {continue;}$otherUsers = $groupMemberMapper->fetchAllByGroupId($record->group_id);foreach($otherUsers as $otherUser){if($currentUser->id != $otherUser->user_id && $otherUser->status == GroupMember::STATUS_ACCEPTED) {if(!in_array($otherUser->user_id, $group_member_ids)) {array_push($group_member_ids, $otherUser->user_id);}}}}$group_member_ids = $group_member_ids ? $group_member_ids : [0];/* Usuarios con que comparto capsulas */$capsule_user_ids = [];$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);$company_ids = [];$records = $capsuleUserMapper->fetchAllActiveByUserId($currentUser->id);foreach($records as $record){if(!in_array($record->company_id,$company_ids)) {array_push($company_ids, $record->company_id);}}foreach($company_ids as $company_id){$otherUsers = $capsuleUserMapper->fetchAllUserIdsForCapsulesActiveByCompanyId($company_id);foreach($otherUsers as $user_id){if($currentUser->id != $user_id ) {if(!in_array($user_id, $capsule_user_ids)) {array_push($capsule_user_ids, $user_id);}}}}$capsule_user_ids = $capsule_user_ids ? $capsule_user_ids : [0];$other_users = array_unique(array_merge($second_degree_connections_ids,$company_user_ids,$group_member_ids,$capsule_user_ids));$queryMapper = QueryMapper::getInstance($this->adapter);$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$group_ids = $groupMemberMapper->fetchAllGroupIdsByUserIds( $other_users);$group_ids = $group_ids ? $group_ids : [0];$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'name','image','status','privacy', 'priority' => new Expression('0') ]);$select->from(['g' => GroupMapper::_TABLE]);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->equalTo('privacy', Group::PRIVACY_IS_PUBLIC);$select->where->equalTo('status', Group::STATUS_ACTIVE);$select->where->in('g.id', $group_ids);$select->where->notEqualTo('g.user_id', $currentUser->id);$select->order('name ASC');//echo $select->getSqlString($this->adapter->platform); exit;$records = $queryMapper->fetchAll($select);usort($records, function ($a, $b) {if( $a['priority'] == $b['priority'] ) {return 0;} else {return $a['priority'] < $b['priority'] ? 1 : -1;}});$items = [];foreach($records as $record){array_push($items, ['id' => $record['uuid'],'name' => trim($record['name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'group', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),'priority' => $record['priority'],]);}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function postsAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$items = [];$postMapper = PostMapper::getInstance($this->adapter);$posts = $postMapper->fetchAllActiveByNetworkId($currentUser->network_id);//print_r($posts);foreach($posts as $post){$dt = \DateTime::createFromFormat('Y-m-d', $post->date);array_push($items, ['image' => $this->url()->fromRoute('storage', ['code' => $post->uuid, 'type' => 'post', 'filename' => $post->image ]),'date' => $dt->format('d/m/Y'),'title' => $post->title,'link' => $this->url()->fromRoute('post', ['id' => $post->uuid]),]);}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function searchPeopleAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$search = trim(filter_var( $this->params()->fromQuery('search'), FILTER_SANITIZE_STRING)) ;if(strlen($search) >= 3) {$userMapper = UserMapper::getInstance($this->adapter);$records = $userMapper->fetchAllSuggestByNetworkIdAndSearch($currentUser->network_id, $search);$users = [];foreach($records as $record){if($currentUser->id == $record->id) {continue;}array_push($users, ['value' => $record->uuid,'text' => trim($record->first_name . ' ' . $record->last_name) . ' (' . $record->email . ')']);}return new JsonModel(['success' => true,'data' => $users]);} else {return new JsonModel(['success' => true,'data' => []]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function footerAction(){$request = $this->getRequest();if($request->isGet()) {$links = isset($this->navigation['footer']) ? $this->navigation['footer'] : [];$data = [];foreach($links as $link){$data[ $link['route'] ] = $link['label'];}return new JsonModel(['success' => true,'data' => $data,]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/*** Recuperamos los grupos sugeridos* tiene que enviarse un petición GET a la siguiente url: /helpers/groups-suggestion/:group_id* retorna un json en caso de ser positivo* [* 'success' : true,* 'data' : [* [* 'id' => 'id del grupo encriptado',* 'name' => 'nombre del grupo',* 'image' => 'imagen del grupo',* 'profile' => 'url del profile',* ]* ]* En caso de ser negativo* [* 'success' : false,* 'data' : mensaje de error* ]* @return \Laminas\View\Model\JsonModel*/public function myGroupsAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'name','image','status','privacy', 'priority' => new Expression('0') ]);$select->from(['g' => GroupMapper::_TABLE]);$select->where->equalTo('status', Group::STATUS_ACTIVE);$select->where->equalTo('g.user_id', $currentUser->id);$select->order('name ASC');$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){array_push($items, ['id' => $record['uuid'],'name' => trim($record['name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'group', 'filename' => $record['image']]),'profile' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),'priority' => $record['priority'],]);}return new JsonModel(['success' => true,'data' => $items]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function nextEventsAction(){$request = $this->getRequest();if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$dt = new \DateTime();$dt->setTime(0, 0, 0);$start = $dt->format('Y-m-d H:i:s');$dt->add(new \DateInterval('P30D'));$dt->setTime(23, 59, 59);$end = $dt->format('Y-m-d H:i:s');$events = [];//3 días$expirePeriod = 86400 * 3;$t1 = time();$companies = [];$companyMapper = CompanyMapper::getInstance($this->adapter);$companyUsers = [];$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$records = $companyUserMapper->fetchAllByUserId($currentUser->id);foreach($records as $record) {$companyUsers[$record->company_id] = $record->backend == CompanyUser::BACKEND_YES;}$zoomMeetingMapper = ZoomMeetingMapper::getInstance($this->adapter);$performanceEvaluationTestMapper = PerformanceEvaluationTestMapper::getInstance($this->adapter);$performanceEvaluationFormMapper = PerformanceEvaluationFormMapper::getInstance($this->adapter);$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$userMapper = UserMapper::getInstance($this->adapter);$calendarEventMapper = CalendarEventMapper::getInstance($this->adapter);$records = $calendarEventMapper->fetchAllByUserIdAndStartTimeAndEndTime($currentUser->id, $start, $end);foreach($records as $record){switch($record->type){case CalendarEvent::TYPE_PERFORMANCE_EVALUATION :$backgroundColor = $currentNetwork->css_calendar_performance_evaluation_bg_color ;$textColor = $currentNetwork->css_calendar_performance_evaluation_text_color;$performanceEvaluationTest = $performanceEvaluationTestMapper->fetchOne($record->relational_id);if($performanceEvaluationTest) {$performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);if($performanceEvaluationForm) {$jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluationForm->job_description_id);if($jobDescription) {if($performanceEvaluationTest->supervisor_id) {$supervisor = $userMapper->fetchOne($performanceEvaluationTest->supervisor_id);} else {$supervisor = '';}if($performanceEvaluationTest->employee_id) {$employee = $userMapper->fetchOne($performanceEvaluationTest->employee_id);} else {$employee = '';}$hasLink = false;if(isset($companyUsers[$currentUser->id])) {if($companyUsers[$currentUser->id]) {$hasLink = true;}}if($hasLink) {if(!isset($companies[$performanceEvaluationTest->company_id])) {$company = $companyMapper->fetchOne($performanceEvaluationTest->company_id);$companies[ $company->id ] = $company;} else {$company = $companies[ $performanceEvaluationTest->company_id ];}$href = $this->url()->fromRoute('backend/signin-company', ['id' => $company->uuid,'relational' => $performanceEvaluationTest->uuid,'type' => CalendarEvent::TYPE_PERFORMANCE_EVALUATION]);$agenda = '<a href="'.$href.'" class="goto-backend"><br>';}$agenda .= " LABEL_PERFORMANCE_EVALUATION_FORM_NAME : " . $performanceEvaluationForm->name . "<br>";$agenda .= " LABEL_PERFORMANCE_EVALUATION_JOB_DESCRIPTION : " . $jobDescription->name . "<br>";switch($performanceEvaluationTest->type){case PerformanceEvaluationTest::TYPE_BOTH :$agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH <br>";break;case PerformanceEvaluationTest::TYPE_SUPERVISOR :$agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR <br>";break;case PerformanceEvaluationTest::TYPE_EMPLOYEE :$agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE <br>";break;}if($supervisor) {$agenda .= " LABEL_PERFORMANCE_EVALUATION_SUPERVISOR : " . trim($supervisor->first_name . ' ' . $supervisor->last_name) . " <br>";}if($employee) {$agenda .= " LABEL_PERFORMANCE_EVALUATION_EMPLOYEE : " . trim($employee->first_name . ' ' . $employee->last_name) . " <br>";}$dtStart = \DateTime::createFromFormat('Y-m-d', $performanceEvaluationTest->last_date);$agenda .= " LABEL_PERFORMANCE_EVALUATION_LAST_DATE : " . $dtStart->format('Y-m-d') . "<br>" ;if($hasLink) {$agenda .= "</a><br>";}array_push($events, ['id' => $performanceEvaluationTest->uuid,'title' => $performanceEvaluationForm->name,'agenda' => $agenda,'start' => $dtStart->format('Y-m-d'),'url' => '','backgroundColor' => $backgroundColor,'textColor' => $textColor,'allDay' => true,'type' => 'task',]);}}}break;case CalendarEvent::TYPE_ZOOM :$zoomMeeting = $zoomMeetingMapper->fetchOne($record->relational_id);if($zoomMeeting) {$backgroundColor = $currentNetwork->css_calendar_zoom_bg_color ;$textColor = $currentNetwork->css_calendar_zoom_text_color;$dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $zoomMeeting->start_time);$t2 = $dtStart->getTimestamp();if($t2 > $t1) {$t3 = $t1 + $expirePeriod;if($t3 > $t2) {$backgroundColor = $currentNetwork->css_calendar_expire_bg_color;$textColor = $currentNetwork->css_calendar_expire_text_color;}}if($currentUser->timezone && $currentUser->timezone != $zoomMeeting->timezone) {$start = str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->start_time, $zoomMeeting->timezone, $currentUser->timezone));$end = str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->end_time, $zoomMeeting->timezone, $currentUser->timezone));} else {$start = str_replace(' ', 'T', $zoomMeeting->start_time);$end = str_replace(' ', 'T', $zoomMeeting->end_time);}$agenda = "<a href=\"{$zoomMeeting->join_url}\" target=\"_blank\">" . $zoomMeeting->agenda . "<br>" ." LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "<br>" ." LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "<br>" ." LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "<br>" ." LABEL_ZOOM_MEETING_TITLE : " . $zoomMeeting->topic . "<br>" ." LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "<br>" ." LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "<br>" ."</a>";array_push($events, ['id' => $zoomMeeting->id,'title' => $zoomMeeting->topic,'agenda' => $agenda,'start' => $start,'end' => $end,'url' => $zoomMeeting->join_url,'backgroundColor' => $backgroundColor,'textColor' => $textColor,'type' => 'event']);}break;}}return new JsonModel(['success' => true,'data' => $events]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}}