Rev 6866 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php/**** Controlador: Mis Perfiles**/declare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use LeadersLinked\Mapper\GroupMapper;use LeadersLinked\Mapper\GroupMemberMapper;use LeadersLinked\Mapper\GroupTypeMapper;use LeadersLinked\Model\Group;use LeadersLinked\Model\GroupMember;use LeadersLinked\Mapper\IndustryMapper;use LeadersLinked\Form\Feed\CreateGroupCompanyForm;use LeadersLinked\Form\Feed\ShareGroupCompanyForm;use LeadersLinked\Mapper\UserBlockedMapper;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Model\User;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\EmailTemplateMapper;use LeadersLinked\Model\EmailTemplate;use LeadersLinked\Mapper\UserNotificationSettingMapper;use LeadersLinked\Library\QueueEmail;use Laminas\Db\Sql\Expression;use LeadersLinked\Model\Notification;use LeadersLinked\Mapper\NotificationMapper;use LeadersLinked\Library\Functions;class GroupController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}/**** Generación del listado de perfiles* {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function indexAction(){$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/group/index.phtml');return $viewModel;}/*** Presenta el perfil con las opciónes de edición de cada sección* @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel*/public function viewAction(){$request = $this->getRequest();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$flashMessenger = $this->plugin('FlashMessenger');$id = $this->params()->fromRoute('id');$isJson = false;$headers = $request->getHeaders();if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$flashMessenger = $this->plugin('FlashMessenger');if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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']);}$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->user_id, $currentUser->id);if ($userBlocked) {$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');return $this->redirect()->toRoute('dashboard');}$userMapper = UserMapper::getInstance($this->adapter);$ownerGroup = $userMapper->fetchOne($group->user_id);$values = [Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',];$accessibility = $values[$group->accessibility];$values = [Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'];$privacy = $values[$group->privacy];$industryMapper = IndustryMapper::getInstance($this->adapter);$record = $industryMapper->fetchOne($group->industry_id);$industry = $record->name;$groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);$record = $groupTypeMapper->fetchOne($group->type_id);$group_type = $record->name;$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $group->user_id);if ($groupMember) {if ($groupMember->status != GroupMember::STATUS_ACCEPTED) {$groupMember->status = $groupMember::STATUS_ACCEPTED;$groupMemberMapper->update($groupMember);}} else {$groupMember = new GroupMember();$groupMember->user_id = $group->user_id;$groupMember->group_id = $group->id;$groupMember->status = GroupMember::STATUS_ACCEPTED;$groupMemberMapper->insert($groupMember);}$total_members = $groupMemberMapper->fetchTotalByGroupId($group->id);$member = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);$show_feeds = false;if ($member) {if ($member->status == GroupMember::STATUS_ACCEPTED || $member->status == GroupMember::STATUS_AUTO_JOIN) {$show_feeds = true;}}$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['user_id' => 'id', 'user_uuid' => 'uuid', 'first_name', 'last_name', 'image']);$select->from(['u' => UserMapper::_TABLE]);$select->join(['tgm' => GroupMemberMapper::_TABLE], 'tgm.user_id = u.id', []);$select->join(['up' => UserProfileMapper::_TABLE], 'up.user_id = u.id', ['user_profile_id' => 'id', 'user_profile_uuid' => 'uuid']);$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->where->equalTo('tgm.status', GroupMember::STATUS_ACCEPTED);// echo $select->getSqlString($this->adapter->platform); exit;$members = [];$records = $queryMapper->fetchAll($select);foreach ($records as $record) {$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($record['user_id'], $currentUser->id);array_push($members, ['name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['user_uuid'], 'type' => 'user', 'filename' => $record['image']]),'link_profile' => $userBlocked ? '' : $this->url()->fromRoute('profile/view', ['id' => $record['user_profile_uuid']])]);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);$data = ['total_members' => $total_members,'accessibility' => $accessibility,'privacy' => $privacy,'industry' => $industry,'group_id' => $group->id,'group_type' => $group_type,'group_uuid' => $group->uuid,'name' => trim($group->name),'image' => $group->image,'cover' => $group->cover,'overview' => $group->description,'website' => $group->website,'members' => $members,'link_inmail' => $ownerGroup->id != $currentUser->id ? $this->url()->fromRoute('inmail', ['id' => $ownerGroup->uuid]) : '','link_request' => '','link_accept' => '','link_cancel' => '','link_leave' => '','link_timeline' => '',];if ($groupMember) {if ($ownerGroup->id != $groupMember->user_id && $groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {$data['link_leave'] = $this->url()->fromRoute('group/leave', ['id' => $group->uuid]);$data['link_timeline'] = $this->url()->fromRoute('feed/timeline', ['id' => $group->uuid, 'type' => 'group']);}if ($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {$data['link_accept'] = $this->url()->fromRoute('group/accept', ['id' => $group->uuid]);$data['link_cancel'] = $this->url()->fromRoute('group/cancel', ['id' => $group->uuid]);}if ($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {$data['link_cancel'] = $this->url()->fromRoute('group/cancel', ['id' => $group->uuid]);}if (in_array($group->accessibility, [Group::ACCESSIBILITY_AUTO_JOIN, Group::ACCESSIBILITY_REQUEST_TO_JOIN]) && $groupMember->status == GroupMember::STATUS_CANCELLED) {$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->id, $currentUser->id);if (!$userBlocked) {$data['link_request'] = $this->url()->fromRoute('group/request', ['id' => $group->uuid]);;}}} else {if (in_array($group->accessibility, [Group::ACCESSIBILITY_AUTO_JOIN, Group::ACCESSIBILITY_REQUEST_TO_JOIN])) {$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->id, $currentUser->id);if (!$userBlocked) {$data['link_request'] = $this->url()->fromRoute('group/request', ['id' => $group->uuid]);;}}}return new JsonModel(['success' => true,'data' => $data]);} else {if (!$id) {$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');return $this->redirect()->toRoute('dashboard');}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($id);if (!$group) {$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');return $this->redirect()->toRoute('dashboard');}$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->user_id, $currentUser->id);if ($userBlocked) {$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');return $this->redirect()->toRoute('dashboard');}$userMapper = UserMapper::getInstance($this->adapter);$ownerGroup = $userMapper->fetchOne($group->user_id);$values = [Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',];$accessibility = $values[$group->accessibility];$values = [Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'];$privacy = $values[$group->privacy];$industryMapper = IndustryMapper::getInstance($this->adapter);$record = $industryMapper->fetchOne($group->industry_id);$industry = $record->name;$groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);$record = $groupTypeMapper->fetchOne($group->type_id);$group_type = $record->name;$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $group->user_id);if ($groupMember) {if ($groupMember->status != GroupMember::STATUS_ACCEPTED) {$groupMember->status = $groupMember::STATUS_ACCEPTED;$groupMemberMapper->update($groupMember);}} else {$groupMember = new GroupMember();$groupMember->user_id = $group->user_id;$groupMember->group_id = $group->id;$groupMember->status = GroupMember::STATUS_ACCEPTED;$groupMemberMapper->insert($groupMember);}$total_members = $groupMemberMapper->fetchTotalByGroupId($group->id);$member = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);$show_feeds = false;if ($member) {if ($member->status == GroupMember::STATUS_ACCEPTED || $member->status == GroupMember::STATUS_AUTO_JOIN) {$show_feeds = true;}}$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['user_id' => 'id', 'user_uuid' => 'uuid', 'first_name', 'last_name', 'image']);$select->from(['u' => UserMapper::_TABLE]);$select->join(['tgm' => GroupMemberMapper::_TABLE], 'tgm.user_id = u.id', []);$select->join(['up' => UserProfileMapper::_TABLE], 'up.user_id = u.id', ['user_profile_id' => 'id', 'user_profile_uuid' => 'uuid']);$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->where->equalTo('tgm.status', GroupMember::STATUS_ACCEPTED);// echo $select->getSqlString($this->adapter->platform); exit;$members = [];$records = $queryMapper->fetchAll($select);foreach ($records as $record) {$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($record['user_id'], $currentUser->id);array_push($members, ['name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['code' => $record['user_uuid'], 'type' => 'user', 'filename' => $record['image']]),'link_profile' => $userBlocked ? '' : $this->url()->fromRoute('profile/view', ['id' => $record['user_profile_uuid']])]);}$formFeed = new CreateGroupCompanyForm();$formShare = new ShareGroupCompanyForm();$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();if ($show_feeds) {$viewModel->setTemplate('leaders-linked/group/view-with-feeds.phtml');} else {$viewModel->setTemplate('leaders-linked/group/view-without-feeds.phtml');}$notificationMapper = NotificationMapper::getInstance($this->adapter);$notificationMapper->markAllNotificationsAsReadByUserIdAndGroupId($currentUser->id, $group->id);$viewModel->setVariables(['user_id' => $currentUser->id,'total_members' => $total_members,'accessibility' => $accessibility,'privacy' => $privacy,'industry' => $industry,'group_id' => $group->id,'group_type' => $group_type,'group_uuid' => $group->uuid,'name' => trim($group->name),'image' => $group->image,'cover' => $group->cover,'overview' => $group->description,'website' => $group->website,'formFeed' => $formFeed,'formShare' => $formShare,'members' => $members,'link_inmail' => $ownerGroup->id != $currentUser->id ? $this->url()->fromRoute('inmail', ['id' => $ownerGroup->uuid]) : '','owner_id' => $ownerGroup->id,'owner_first_name' => $ownerGroup->first_name,'owner_last_name' => $ownerGroup->last_name,'owner_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $ownerGroup->uuid, 'filename' => $ownerGroup->image]),]);return $viewModel;}}public function leaveAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = Functions::sanitizeFilterString($this->params()->fromPost('flash', 'false'));$flash = $flash === 'true' ? true : false;if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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 ($group->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, $currentUser->id);if ($groupMember) {if ($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {$groupMember->status = GroupMember::STATUS_CANCELLED;if ($groupMemberMapper->update($groupMember)) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP',]);}} else {return new JsonModel(['success' => false,'data' => $groupMemberMapper->getError()]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_NOT_MEMBER']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function cancelAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = Functions::sanitizeFilterString($this->params()->fromPost('flash', 'false'));$flash = $flash === 'true' ? true : false;if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);if ($groupMember) {if ($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED || $groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {$groupMember->status = GroupMember::STATUS_CANCELLED;if ($groupMemberMapper->update($groupMember)) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_CANCELLED');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_REQUEST_CANCELLED','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_REQUEST_CANCELLED']);}} else {return new JsonModel(['success' => false,'data' => $groupMemberMapper->getError()]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_NOT_MEMBER']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function rejectAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = Functions::sanitizeFilterString($this->params()->fromPost('flash', 'false'));$flash = $flash === 'true' ? true : false;if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);if ($groupMember) {if ($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {$groupMember->status = GroupMember::STATUS_REJECTED;if ($groupMemberMapper->update($groupMember)) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_REJECTED');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_REQUEST_REJECTED','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_REQUEST_REJECTED']);}} else {return new JsonModel(['success' => false,'data' => $groupMemberMapper->getError()]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_NOT_MEMBER']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function acceptAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = Functions::sanitizeFilterString($this->params()->fromPost('flash', 'false'));$flash = $flash === 'true' ? true : false;if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);if ($groupMember) {if ($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {$groupMember->status = GroupMember::STATUS_ACCEPTED;if ($groupMemberMapper->update($groupMember)) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS']);}} else {return new JsonModel(['success' => false,'data' => $groupMemberMapper->getError()]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_HAVE_NOT_INVITED_THIS_GROUP']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_NOT_MEMBER']);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function requestAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = Functions::sanitizeFilterString($this->params()->fromPost('flash', 'false'));$flash = $flash === 'true' ? true : false;if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuidAndNetworkId($id, $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']);}$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);$groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);if ($groupMember) {if ($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOU_ARE_MEMBER']);}if ($groupMember->status == GroupMember::STATUS_REJECTED) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_YOUR_REQUEST_WAS_PREVIOUSLY_REJECTED']);}}if ($group->privacy == Group::PRIVACY_IS_PRIVATE || $group->accessibility == Group::ACCESSIBILITY_ADMIN_WILL_ADD) {return new JsonModel(['success' => false,'data' => 'ERROR_GROUP_ACCESS_ONLY_BY_ADMIN_INVITATION']);}if ($groupMember) {if ($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {$groupMember->status = GroupMember::STATUS_AUTO_JOIN;$groupMember->joined_on = new Expression('NOW()');}if ($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {$groupMember->status = GroupMember::STATUS_JOINING_REQUESTED;$groupMember->joining_request_on = new Expression('NOW()');}$result = $groupMemberMapper->update($groupMember);} else {$groupMember = new GroupMember();$groupMember->group_id = $group->id;$groupMember->user_id = $currentUser->id;if ($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {$groupMember->status = GroupMember::STATUS_AUTO_JOIN;}if ($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {$groupMember->status = GroupMember::STATUS_JOINING_REQUESTED;}$result = $groupMemberMapper->insert($groupMember);}if ($result) {$userMapper = UserMapper::getInstance($this->adapter);$userOwnerGroup = $userMapper->fetchOne($group->user_id);$notification = new Notification();$notification->type = Notification::TYPE_RECEIVE_REQUEST_JOIN_MY_GROUP;$notification->read = Notification::NO;$notification->user_id = $userOwnerGroup->id;$notification->group_id = $group->id;$notification->message = 'LABEL_NOTIFICATION_RECEIVE_REQUEST_JOIN_MY_GROUP';$notification->url = $this->url()->fromRoute('group/view', ['id' => $group->uuid]);$notificationMapper = NotificationMapper::getInstance($this->adapter);$notificationMapper->insert($notification);$userNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);$userNotificationSetting = $userNotificationSettingMapper->fetchOne($group->user_id);if ($userNotificationSetting->receive_request_join_my_group) {$emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);$emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_RECEIVE_REQUEST_JOIN_MY_GROUP, $currentUser->network_id);if ($emailTemplate) {$arrayCont = ['firstname' => $currentUser->first_name,'lastname' => $currentUser->last_name,'other_user_firstname' => $userOwnerGroup->first_name,'other_user_lastname' => $userOwnerGroup->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, $userOwnerGroup->email, trim($userOwnerGroup->first_name . ' ' . $userOwnerGroup->last_name));}}if ($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS']);}}if ($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {if ($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_SUCCESS');return new JsonModel(['success' => true,'data' => ['message' => 'LABEL_GROUP_REQUEST_SUCCESS','reload' => true]]);} else {return new JsonModel(['success' => true,'data' => 'LABEL_GROUP_REQUEST_SUCCESS']);}}} else {return new JsonModel(['success' => false,'data' => $groupMapper->getError()]);}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/**** Generación del listado de perfiles* {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function joinedGroupsAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isGet()) {$headers = $request->getHeaders();$isJson = false;if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$values = [Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'];$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'name', 'privacy', 'image']);$select->from(['g' => GroupMapper::_TABLE]);$select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id = g.id', []);$select->where->equalTo('g.status', Group::STATUS_ACTIVE);$select->where->in('gm.status', [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);$select->where->equalTo('gm.user_id', $currentUser->id);$select->where->notEqualTo('g.user_id', $currentUser->id);$select->where->equalTo('g.network_id', $currentUser->network_id);if ($search) {$select->where->like('name', '%' . $search . '%');}$select->order('name ASC');$records = $queryMapper->fetchAll($select);$items = [];foreach ($records as $record) {$item = ['name' => $record['name'],'privacy' => $values[$record['privacy']],'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid']]),'link_leave' => $this->url()->fromRoute('group/leave', ['id' => $record['uuid']]),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/group/joined-groups.phtml');return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function invitationsReceivedAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isGet()) {$headers = $request->getHeaders();$isJson = false;if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['uuid', 'name', 'image']);$select->from(['g' => GroupMapper::_TABLE]);$select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id = g.id', []);$select->where->equalTo('gm.user_id', $currentUser->id);$select->where->equalTo('gm.status', GroupMember::STATUS_ADDED_BY_ADMIN);$select->where->equalTo('g.status', Group::STATUS_ACTIVE);$select->where->equalTo('g.network_id', $currentUser->network_id);if ($search) {$select->where->like('g.name', '%' . $search . '%');}$select->order('name ASC');//echo $select2->getSqlString($this->adapter->platform); exit;$records = $queryMapper->fetchAll($select);$items = [];foreach ($records as $record) {$item = ['name' => $record['name'],'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid']]),'link_accept' => $this->url()->fromRoute('group/accept', ['id' => $record['uuid']]),'link_reject' => $this->url()->fromRoute('group/reject', ['id' => $record['uuid']]),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/group/invitations-received.phtml');return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function requestsSentAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isGet()) {$headers = $request->getHeaders();$isJson = false;if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['uuid', 'name', 'image']);$select->from(['g' => GroupMapper::_TABLE]);$select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id = g.id', []);$select->where->equalTo('gm.user_id', $currentUser->id);$select->where->equalTo('gm.status', GroupMember::STATUS_JOINING_REQUESTED);$select->where->equalTo('g.status', Group::STATUS_ACTIVE);$select->where->equalTo('g.network_id', $currentUser->network_id);if ($search) {$select->where->like('g.name', '%' . $search . '%');}$select->order('name ASC');//echo $select2->getSqlString($this->adapter->platform); exit;$records = $queryMapper->fetchAll($select);$items = [];foreach ($records as $record) {$item = ['name' => $record['name'],'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid']]),'link_cancel' => $this->url()->fromRoute('group/cancel', ['id' => $record['uuid']]),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/group/requests-sent.phtml');return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}}