Rev 1 | Rev 1361 | Ir a la última revisión | 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\Cache\Storage\Adapter\AbstractAdapter;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\Library\Functions;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 PhpParser\Node\Stmt\GroupUse;use LeadersLinked\Library\UserNotification;use LeadersLinked\Mapper\EmailTemplateMapper;use LeadersLinked\Model\EmailTemplate;use LeadersLinked\Mapper\UserNotificationSettingMapper;use LeadersLinked\Library\QueueEmail;use phpDocumentor\Reflection\PseudoTypes\True_;use Laminas\Db\Sql\Expression;use LeadersLinked\Model\Notification;use LeadersLinked\Mapper\NotificationMapper;class GroupController extends AbstractActionController{/**** @var AdapterInterface*/private $adapter;/**** @var AbstractAdapter*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @param AdapterInterface $adapter* @param AbstractAdapter $cache* @param LoggerInterface $logger* @param array $config*/public function __construct($adapter, $cache , $logger, $config){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;}/**** 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->fetchOneByUuid($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' => $this->url()->fromRoute('inmail', ['id' => $ownerGroup->uuid]),'link_request' => '','link_accept' => '','link_cancel' => '','link_leave' => '',];if($groupMember) {if($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {$data['link_leave'] = $this->url()->fromRoute('group/leave', ['id' => $group->uuid] );}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' => $this->url()->fromRoute('inmail', ['id' => $ownerGroup->uuid]),]);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 = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);$flash = $flash === 'true'? true: false;if(!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($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 = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);$flash = $flash === 'true'? true: false;if(!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($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 = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);$flash = $flash === 'true'? true: false;if(!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($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_CANCELLED;if($groupMemberMapper->update($groupMember)) {if($flash) {$flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_REJECTED');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 acceptAction(){$flashMessenger = $this->plugin('FlashMessenger');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if($request->isPost()) {$id = $this->params()->fromRoute('id');$flash = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);$flash = $flash === 'true'? true: false;if(!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($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 = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);$flash = $flash === 'true'? true: false;if(!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$groupMapper = GroupMapper::getInstance($this->adapter);$group = $groupMapper->fetchOneByUuid($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->fetchOne(EmailTemplate::ID_RECEIVE_REQUEST_JOIN_MY_GROUP);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 = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));$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);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 = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));$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);if($search) {$select->where->like('c.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 = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));$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);if($search) {$select->where->like('c.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']);}}}