Rev 6605 | Rev 6866 | 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 LeadersLinked\Cache\CacheInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\CalendarEventMapper;use LeadersLinked\Mapper\CompanyFollowerMapper;use LeadersLinked\Mapper\CompanyServiceMapper;use LeadersLinked\Mapper\JobDescriptionMapper;use LeadersLinked\Mapper\PerformanceEvaluationFormMapper;use LeadersLinked\Mapper\PerformanceEvaluationTestMapper;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\RecruitmentSelectionCandidateMapper;use LeadersLinked\Mapper\RecruitmentSelectionInterviewMapper;use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\ZoomMeetingMapper;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\UserNotificationSettingMapper;use LeadersLinked\Model\CalendarEvent;use LeadersLinked\Model\PerformanceEvaluationTest;use LeadersLinked\Model\RecruitmentSelectionInterview;use LeadersLinked\Model\User;use LeadersLinked\Mapper\ConnectionMapper;use LeadersLinked\Mapper\ProfileVisitMapper;use LeadersLinked\Mapper\GroupMemberMapper;use LeadersLinked\Model\GroupMember;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 LeadersLinked\Model\Service;use LeadersLinked\Mapper\DailyPulseEmojiMapper;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Mapper\NetworkMapper;use LeadersLinked\Model\Network;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\CompanySizeMapper;use LeadersLinked\Mapper\DegreeMapper;use LeadersLinked\Mapper\LanguageMapper;use LeadersLinked\Mapper\SkillMapper;use LeadersLinked\Mapper\AptitudeMapper;use LeadersLinked\Mapper\HobbyAndInterestMapper;class HelperController extends AbstractActionController{/**** @var AdapterInterface*/private $adapter;/**** @var CacheInterface*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var array*/private $navigation;/**** @param AdapterInterface $adapter* @param CacheInterface $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->join(['up' => UserProfileMapper::_TABLE], 'up.user_id = u.id ', ['description']);$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' => '','user_profile' => $record['description'],];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 = Functions::sanitizeFilterString($this->params()->fromQuery('search'));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);$recruitmentSelectionCandidateMapper = RecruitmentSelectionCandidateMapper::getInstance($this->adapter);$recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);$recruitmentSelectionInterviewMapper = RecruitmentSelectionInterviewMapper::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_RECRUITMENT_SELECTION_INTERVIEW:$backgroundColor = $currentNetwork->css_calendar_recruitment_and_selection_bg_color;$textColor = $currentNetwork->css_calendar_recruitment_and_selection_text_color;$recruitmentSelectionInterview = $recruitmentSelectionInterviewMapper->fetchOne($record->relational_id);if ($recruitmentSelectionInterview) {$recruitmentSelectionVacancy = $recruitmentSelectionVacancyMapper->fetchOne($recruitmentSelectionInterview->vacancy_id);$recruitmentSelectionCandidate = $recruitmentSelectionCandidateMapper->fetchOne($recruitmentSelectionInterview->candidate_id);if ($recruitmentSelectionVacancy && $recruitmentSelectionCandidate) {$jobDescription = $jobDescriptionMapper->fetchOne($recruitmentSelectionVacancy->job_description_id);if ($jobDescription) {$hasLink = false;if (isset($companyUsers[$currentUser->id])) {if ($companyUsers[$currentUser->id]) {$hasLink = true;}}if ($hasLink) {if (!isset($companies[$recruitmentSelectionInterview->company_id])) {$company = $companyMapper->fetchOne($recruitmentSelectionInterview->company_id);$companies[$company->id] = $company;} else {$company = $companies[$recruitmentSelectionInterview->company_id];}$href = $this->url()->fromRoute('backend/signin-company', ['id' => $company->uuid,'relational' => $recruitmentSelectionInterview->uuid,'type' => CalendarEvent::TYPE_RECRUITMENT_SELECTION_INTERVIEW]);$agenda = '<a href="' . $href . '" class="goto-backend"><br>';}$agenda .= " LABEL_RECRUITMENT_SELECTION_JOB_DESCRIPTION : " . $jobDescription->name . "<br>";switch ($recruitmentSelectionInterview->type) {case RecruitmentSelectionInterview::TYPE_BOSS:$agenda .= " LABEL_RECRUITMENT_SELECTION_TYPE : LABEL_RECRUITMENT_SELECTION_TYPE_BOSS_INTERVIEW <br>";break;case RecruitmentSelectionInterview::TYPE_HUMAN_RESOURCE:$agenda .= " LABEL_RECRUITMENT_SELECTION_TYPE : LABEL_RECRUITMENT_SELECTION_TYPE_HUMAN_RESOURCE <br>";break;}$agenda .= " LABEL_RECRUITMENT_SELECTION_CANDIDATE : " . trim($recruitmentSelectionCandidate->first_name . ' ' . $recruitmentSelectionCandidate->last_name) . " <br>";$dtStart = \DateTime::createFromFormat('Y-m-d', $recruitmentSelectionInterview->last_date);$agenda .= " LABEL_PERFORMANCE_EVALUATION_LAST_DATE : " . $dtStart->format('Y-m-d') . "<br>";if ($hasLink) {$agenda .= "</a><br>";}array_push($events, ['id' => $recruitmentSelectionInterview->uuid,'title' => $recruitmentSelectionVacancy->name,'agenda' => $agenda,'start' => $dtStart->format('Y-m-d'),'url' => '','backgroundColor' => $backgroundColor,'textColor' => $textColor,'allDay' => true,'type' => 'task',]);}}}break;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']);}}public function menuAction(){$request = $this->getRequest();if ($request->isGet()) {$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$network = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');if($currentUserPlugin->hasIdentity()) {$currentUser = $currentUserPlugin->getUser();$acl = $this->getEvent()->getViewModel()->getVariable('acl');$link_admin = $currentUser->usertype_id == UserType::ADMIN ? 1 : 0;$link_impersonate = $currentUser->is_super_user == User::IS_SUPER_USER_YES ? 1 : 0;$fullname = trim($currentUser->first_name . ' ' . $currentUser->last_name);$profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);$visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);$connectionMapper = ConnectionMapper::getInstance($this->adapter);$connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);if($currentUser->location_id) {$locationMapper = LocationMapper::getInstance($this->adapter);$location = $locationMapper->fetchOne($currentUser->location_id);$country = $location->country;} else {$country = '';}if($currentUser->usertype_id == UserType::ADMIN) {$link_admin = '/backend/signin-admin';} else {$link_admin = '';}$link_company = '';if($network->default != Network::DEFAULT_YES) {$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchDefaultForNetworkByNetworkId($network->id);if($company) {$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);if($companyUser) {if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {$link_company = ['route' => 'backend/signin-company', 'id' => $company->uuid ];}}}}if ($acl->isAllowed($currentUser->usertype_id, 'knowledge-area')) {$route_knowledge_area = $this->url()->fromRoute('knowledge-area');$link_knowledge_area = 1;} else {$route_knowledge_area = '';$link_knowledge_area = 0;}if ($acl->isAllowed($currentUser->usertype_id, 'my-coach')) {$route_my_coach = $this->url()->fromRoute('my-coach');$link_my_coach = 1;} else {$route_my_coach = '';$link_my_coach = 0;}if($network->default == Network::DEFAULT_YES) {if($network->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {$pages = getAclMenuDefaultNetworkConnectionUser2User();} else {$pages = getAclMenuDefaultNetworkConnectionAll2All();}} else {if($network->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {$pages = getAclMenuNonDefaulNetworkConnectionUser2User();} else {$pages = getAclMenuNonDefaultNetworkConnectionAll2All();}}$menu = [];foreach ($pages as $page) {if (!$page || empty($page['route']) || !$acl->isAllowed($currentUser->usertype_id, $page['route'])) {continue;}$ajax = false;if ($page['route'] == 'company' && $network->default == Network::DEFAULT_NO) {if ($link_company) {$page['route'] = $this->url($link_company['route'], ['id' => $link_company['id']]);$ajax = true;} else {continue;}}$option = ['label' => $page['label'],'href' => $page['route'],'img' => empty($page['class']) ? '' : $page['class'],'ajax' => $ajax ? 1 : 0,'childs' => [],];$childs = empty($page['pages']) ? [] : $page['pages'];if ($childs) {foreach ($childs as $child) {if (!$acl->isAllowed($currentUser->usertype_id, $child['route'])) {continue;}$childs_level2 = [];$childsLevel2 = empty($child['pages']) ? [] : $child['pages'];if ($childsLevel2) {foreach ($childsLevel2 as $childLevel2) {if (!$acl->isAllowed($currentUser->usertype_id, $childLevel2['route'])) {continue;}array_push($childs_level2, ['label' => $childLevel2['label'],'href' => $childLevel2['route'],]);}}array_push($option['childs'], ['label' => $child['label'],'href' => $child['route'],'childs' => $childs_level2,]);}}array_push($menu, $option);}$image = $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $currentUser->uuid, 'filename' => $currentUser->image]);$isChatPage = $this->getEvent()->getViewModel()->getVariable('is_chat');$routeCheckSession = $this->url()->fromRoute('check-session');return new JsonModel(['menu' => $menu,'isChatPage' => $isChatPage == 1,'routeCheckSession' => $routeCheckSession,'linkAdmin' => $link_admin == 1,'linkImpersonate' => $link_impersonate == 1,'image' => $image,'fullName' => $fullname,'country' => $country,'visits' => $visits,'connections' => $connections,'logoForNavbar' => 'https://' . $network->main_hostname . '/storage-network/type/navbar','defaultNetwork' => $network->default,'linkKnowledgeArea' => $link_knowledge_area == 1,'routeKnowledgeArea' => $route_knowledge_area,'linkMyCoach' => $link_my_coach == 1,'routeMyCoach' => $route_my_coach,]);}return new JsonModel(['menu' => [],'isChatPage' => false,'routeCheckSession' => '','linkAdmin' => false,'linkImpersonate' => false,'image' => '','fullName' => '','country' => 0,'visits' => 0,'connections' => 0,'logoForNavbar' => 'https://' . $network->main_hostname . '/storage-network/type/navbar','defaultNetwork' => $network->default,'linkKnowledgeArea' => false,'routeKnowledgeArea' => '','linkMyCoach' => false,'routeMyCoach' => '',]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function companySizesAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = CompanySizeMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->uuid ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function degreesAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = DegreeMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->uuid ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function languagesAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = LanguageMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->id ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function skillsAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = SkillMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->uuid ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function aptitudesAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = AptitudeMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->uuid ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function hobbiesAction(){$request = $this->getRequest();if ($request->isGet()) {$items = [];$mapper = HobbyAndInterestMapper::getInstance($this->adapter);$records = $mapper->fetchAllActive();foreach($records as $record){$items[ $record->uuid ] = $record->name;}return new JsonModel(['success' => true,'data' => $items]);}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}