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'
]);
}
}
}