Rev 3639 | Rev 6749 | 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 Laminas\View\Model\JsonModel;
use LeadersLinked\Mapper\CompanyLocationMapper;
use LeadersLinked\Mapper\CompanyFollowerMapper;
use LeadersLinked\Mapper\CompanyUserMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\IndustryMapper;
use LeadersLinked\Mapper\CompanySizeMapper;
use LeadersLinked\Model\CompanyFollower;
use LeadersLinked\Mapper\UserBlockedMapper;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Model\Company;
use LeadersLinked\Model\CompanyUser;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Mapper\NotificationMapper;
use LeadersLinked\Model\Network;
class CompanyController 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()
{
//$currentUserPlugin = $this->plugin('currentUserPlugin');
//$currentUser = $currentUserPlugin->getUser();
$request = $this->getRequest();
if($request->isGet()) {
$this->layout()->setTemplate('layout/layout-my-company.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/my-company/index.phtml');
return $viewModel ;
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
/**
* 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();
if($request->isGet()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$request = $this->getRequest();
$id = $this->params()->fromRoute('id');
$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) {
$flashMessenger = $this->plugin('FlashMessenger');
if(!$id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
$records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
$locations = [];
foreach($records as $record)
{
$location = [
'formatted_address' => $record['formatted_address'],
'country' => $record['country'],
'is_main' => $record['is_main'],
];
array_push($locations, $location);
}
$industryMapper = IndustryMapper::getInstance($this->adapter);
$industry = $industryMapper->fetchOne($company->industry_id);
$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
$companySize = $companySizeMapper->fetchOne($company->company_size_id);
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
$total_followers = $companyFollowerMapper->getCountFollowers($company->id);
$follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
$link_inmail = '';
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUserOwner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
if($companyUserOwner) {
$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($currentUser->id, $companyUserOwner->user_id);
if(!$userBlocked) {
$userMapper = UserMapper::getInstance($this->adapter);
$userOwner = $userMapper->fetchOne($companyUserOwner->user_id);
$link_inmail = $this->url()->fromRoute('inmail',['id' => $userOwner->uuid]);
}
} else {
$userBlocked = false;
}
$data = [
'link_follow' => '',
'link_unfollow' => '',
'link_request' => '',
'link_accept' => '',
'link_cancel' => '',
'link_reject' =>'',
'link_leave' => '',
'total_followers' => $total_followers,
'company_name' => $company->name,
'company_uuid' => $company->uuid,
'name' => trim($company->name),
'image' => $company->image,
'cover' => $company->cover,
'overview' => $company->description,
'website' => $company->website,
'foundation_year' => $company->foundation_year,
'facebook' => $company->facebook,
'instagram' => $company->instagram,
'twitter' => $company->twitter,
'locations' => $locations,
'industry' => $industry->name,
'company_size' => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
'is_follower' => $follower ? 1 : 0,
'link_inmail' => $link_inmail,
'show_contact' => $userBlocked ? 0 : 1,
];
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD) {
$data['link_accept'] = $this->url()->fromRoute('company/accept', ['id' => $company->uuid]);
$data['link_reject'] = $this->url()->fromRoute('company/reject', ['id' => $company->uuid]);
}
if($companyUser->status == CompanyUser::STATUS_SENT) {
$data['link_cancel'] = $this->url()->fromRoute('company/cancel', ['id' => $company->uuid]);
}
if($companyUser->owner == CompanyUser::OWNER_NO && $companyUser->creator == CompanyUser::CREATOR_NO && $companyUser->status == CompanyUser::STATUS_ACCEPTED) {
$data['link_leave'] = $this->url()->fromRoute('company/leave', ['id' => $company->uuid]);;
}
if($companyUser->status == CompanyUser::STATUS_CANCELLED) {
$data['link_request'] = $this->url()->fromRoute('company/request', ['id' => $company->uuid]);;
}
} else {
$data['link_request'] = $this->url()->fromRoute('company/request', ['id' => $company->uuid]);;
}
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
$data['total_followers'] = $companyFollowerMapper->getCountFollowers($company->id);
$follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($follower) {
$data['link_unfollow'] = $this->url()->fromRoute('company/unfollow', ['id' => $company->uuid]);;
} else {
$data['link_follow'] = $this->url()->fromRoute('company/follow', ['id' => $company->uuid]);
}
$companyUserOwner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
if($companyUserOwner) {
$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($currentUser->id, $companyUserOwner->user_id);
if(!$userBlocked) {
$data['link_contact'] = $this->url()->fromRoute('inmail', ['id' => $company->uuid]);;
}
}
return new JsonModel([
'success' => true,
'data' => $data
]);
} else {
$flashMessenger = $this->plugin('FlashMessenger');
if(!$id) {
$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
return $this->redirect()->toRoute('dashboard');
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
if(!$company || $company->status != Company::STATUS_ACTIVE) {
$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
return $this->redirect()->toRoute('dashboard');
}
// $show_feeds = false;
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
/*
if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED) {
$show_feeds = true;
}
*/
$companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
$records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
$locations = [];
foreach($records as $record)
{
$location = [
'formatted_address' => $record['formatted_address'],
'country' => $record['country'],
'is_main' => $record['is_main'],
];
array_push($locations, $location);
}
$industryMapper = IndustryMapper::getInstance($this->adapter);
$industry = $industryMapper->fetchOne($company->industry_id);
$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
$companySize = $companySizeMapper->fetchOne($company->company_size_id);
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
$total_followers = $companyFollowerMapper->getCountFollowers($company->id);
$follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
/*
if($follower) {
$show_feeds = true;
}
*/
$link_inmail = '';
$companyUserOwner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
if($companyUserOwner) {
$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($currentUser->id, $companyUserOwner->user_id);
if(!$userBlocked) {
$userMapper = UserMapper::getInstance($this->adapter);
$userOwner = $userMapper->fetchOne($companyUserOwner->user_id);
$link_inmail = $this->url()->fromRoute('inmail',['id' => $userOwner->uuid]);
}
} else {
$userBlocked = false;
}
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
/*
if($show_feeds) {
$viewModel->setTemplate('leaders-linked/company/view-with-feeds.phtml');
} else {
$viewModel->setTemplate('leaders-linked/company/view-without-feeds.phtml');
}
*/
$notificationMapper = NotificationMapper::getInstance($this->adapter);
$notificationMapper->markAllNotificationsAsReadByUserIdAndCompanyId($currentUser->id, $company->id);
$viewModel->setTemplate('leaders-linked/company/view-without-feeds.phtml');
$viewModel->setVariables([
'total_followers' => $total_followers,
'company_id' => $company->id,
'company_name' => $company->name,
'company_uuid' => $company->uuid,
'name' => trim($company->name),
'image' => $company->image,
'cover' => $company->cover,
'overview' => $company->description,
'website' => $company->website,
'foundation_year' => $company->foundation_year,
'facebook' => $company->facebook,
'instagram' => $company->instagram,
'twitter' => $company->twitter,
'locations' => $locations,
'industry' => $industry->name,
'company_size' => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
'show_contact' => $userBlocked ? 0 : 1,
'is_follower' => $follower ? 1 : 0,
'link_inmail' => $link_inmail,
]);
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
public function followAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$flashMessenger = $this->plugin('FlashMessenger');
$request = $this->getRequest();
$id = $this->params()->fromRoute('id');
if(!$id) {
$data = [
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
];
return new JsonModel($data);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
if(!$company) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
if($company->status != Company::STATUS_ACTIVE) {
$data = [
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
];
return new JsonModel($data);
}
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
if($request->isPost()) {
$flash = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
$flash = $flash === 'true'? true: false;
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
$companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyFollower) {
$data = [
'success' => false,
'data' => 'ERROR_YOU_ALREADY_FOLLOW_THIS_COMPANY'
];
} else {
$companyFollower = new CompanyFollower();
$companyFollower->company_id = $company->id;
$companyFollower->follower_id = $currentUser->id;
$result = $companyFollowerMapper->insert($companyFollower);
if($result) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_STARTED_FOLLOWING_THIS_COMPANY');
$data = [
'success' => true,
'data' => [
'message' =>'LABEL_STARTED_FOLLOWING_THIS_COMPANY',
'reload' => true
]
];
} else {
$data = [
'success' => true,
'data' => 'LABEL_STARTED_FOLLOWING_THIS_COMPANY'
];
}
} else {
$data = [
'success' => false,
'data' => $companyFollowerMapper->getError()
];
}
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($data);
}
public function unfollowAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$flashMessenger = $this->plugin('FlashMessenger');
$request = $this->getRequest();
$id = $this->params()->fromRoute('id');
if(!$id) {
$data = [
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
];
return new JsonModel($data);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
if(!$company) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
if($company->status != Company::STATUS_ACTIVE) {
$data = [
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
];
return new JsonModel($data);
}
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
if($request->isPost()) {
$flash = filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
$flash = $flash === 'true'? true: false;
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
$companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyFollower) {
$result = $companyFollowerMapper->deleteByCompanyIdAndUserId($company->id, $currentUser->id);
if($result) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS');
$data = [
'success' => true,
'data' => [
'message' => 'LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS',
'reload' => true
],
];
} else {
$data = [
'success' => true,
'data' => 'LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS',
];
}
} else {
$data = [
'success' => false,
'data' => $companyFollowerMapper->getError()
];
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_YOU DONT_FOLLOW_THIS_COMPANY'
];
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($data);
}
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'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if($companyUser->status == CompanyUser::STATUS_ACCEPTED ) {
$companyUser->status = CompanyUser::STATUS_CANCELLED;
if($companyUserMapper->update($companyUser)) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY');
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY',
'reload' => true
]
]);
} else {
return new JsonModel([
'success' => true,
'data' => 'LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY',
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => $companyUserMapper->getError()
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_YOU_ARE_NOT_AN_ACTIVE_USER_OF_THIS_COMPANY'
]);
}
} 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'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuid($id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if( $companyUser->status == CompanyUser::STATUS_SENT) {
$companyUser->status = CompanyUser::STATUS_CANCELLED;
if($companyUserMapper->update($companyUser)) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_COMPANY_REQUEST_CANCELLED');
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_COMPANY_REQUEST_CANCELLED',
'reload' => true,
]
]);
} else {
return new JsonModel([
'success' => true,
'data' => 'LABEL_COMPANY_REQUEST_CANCELLED'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => $companyUserMapper->getError()
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' =>'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
]);
}
} 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'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuid($id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD ) {
$companyUser->status = CompanyUser::STATUS_CANCELLED;
if($companyUserMapper->update($companyUser)) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY');
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY',
'reload' => true
]
]);
} else {
return new JsonModel([
'success' => true,
'data' => 'LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => $companyUserMapper->getError()
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' =>'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
]);
}
} 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'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuid($id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD) {
$companyUser->status = CompanyUser::STATUS_ACCEPTED;
if($companyUserMapper->update($companyUser)) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY' );
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY',
'reload' => true
]
]);
} else {
return new JsonModel([
'success' => true,
'data' => 'LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY',
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => $companyUserMapper->getError()
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
]);
}
} 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'
]);
}
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuid($id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
if($company->status != Company::STATUS_ACTIVE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
]);
}
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($companyUser) {
if($companyUser->status == CompanyUser::STATUS_ACCEPTED) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_YOU_ARE_USER'
]);
}
if($companyUser->status == CompanyUser::STATUS_REJECTED) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_YOUR REQUEST WAS PREVIOUSLY REJECTED'
]);
}
}
if($companyUser) {
$companyUser->status = CompanyUser::STATUS_SENT;
$result = $companyUserMapper->update($companyUser);
} else {
$companyUser = new CompanyUser();
$companyUser->company_id = $company->id;
$companyUser->user_id = $currentUser->id;
$companyUser->status = CompanyUser::STATUS_SENT;
$result = $companyUserMapper->insert($companyUser);
}
if($result) {
if($flash) {
$flashMessenger->addSuccessMessage('LABEL_COMPANY_REQUEST_SENT' );
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_COMPANY_REQUEST_SENT',
'reload' => true
]
]);
} else {
return new JsonModel([
'success' => true,
'data' => 'LABEL_COMPANY_REQUEST_SENT'
]);
}
return new JsonModel([
'success' => true,
'data' => 'LABEL_COMPANY_REQUEST_SENT'
]);
} else {
return new JsonModel([
'success' => false,
'data' => $companyUserMapper->getError()
]);
}
} 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(['c' => CompanyMapper::_TABLE]);
$select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id = c.id', []);
$select->where->equalTo('cu.user_id', $currentUser->id);
$select->where->equalTo('cu.status', CompanyUser::STATUS_ADMIN_WILL_ADD);
$select->where->equalTo('c.status', Company::STATUS_ACTIVE);
if($search) {
$select->where->like('c.name', '%' . $search . '%');
}
$select->order('name ASC');
// echo $select->getSqlString($this->adapter->platform); exit;
$records = $queryMapper->fetchAll($select);
$items = [];
foreach($records as $record)
{
$item = [
'name' => $record['name'],
'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
'link_accept' => $this->url()->fromRoute('company/accept', ['id' => $record['uuid'] ]),
'link_reject' => $this->url()->fromRoute('company/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/company/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(['c' => CompanyMapper::_TABLE]);
$select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id = c.id', ['status']);
$select->where->equalTo('cu.user_id', $currentUser->id);
$select->where->equalTo('cu.status', CompanyUser::STATUS_SENT);
$select->where->equalTo('c.status', Company::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' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
'link_cancel' => $this->url()->fromRoute('company/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/company/requests-sent.phtml');
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
public function iWorkWithAction()
{
$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([ 'id', 'uuid', 'name', 'image']);
$select->from(['c' => CompanyMapper::_TABLE]);
$select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id = c.id', []);
$select->where->equalTo('cu.user_id', $currentUser->id);
$select->where->equalTo('cu.status', CompanyUser::STATUS_ACCEPTED);
$select->where->equalTo('c.status', Company::STATUS_ACTIVE);
$select->where->equalTo('cu.owner', CompanyUser::OWNER_NO);
$select->where->equalTo('cu.creator', CompanyUser::CREATOR_NO);
if($search) {
$select->where->like('c.name', '%' . $search . '%');
}
$select->order('name ASC');
/*
* select uuid, name, image from tbl_companies as c
inner join tbl_company_users as cu on c.id = cu.company_id
and cu.user_id = 2 and c.status = 'a' and cu.status = 'aa'
*/
//echo $select->getSqlString($this->adapter->platform); exit;
$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
$records = $queryMapper->fetchAll($select);
$items = [];
foreach($records as $record)
{
$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($record['id'], $currentUser->id);
if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {
$link_my_company = $this->url()->fromRoute('backend/signin-company', ['id' => $record['uuid'] ]);
} else {
$link_my_company = '';
}
$item = [
'name' => $record['name'],
'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
'link_leave' => $this->url()->fromRoute('company/leave', ['id' => $record['uuid'] ]),
'link_my_company' => $link_my_company
];
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/company/i-work-with.phtml');
return $viewModel ;
}
} 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 followingCompaniesAction()
{
$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(['id', 'uuid', 'name', 'status', 'image']);
$select->from(['c' => CompanyMapper::_TABLE]);
$select->join(['cf' => CompanyFollowerMapper::_TABLE],'cf.company_id = c.id' ,['follower_id']);
$select->where->equalTo('follower_id', $currentUser->id);
$select->where->equalTo('c.status', Company::STATUS_ACTIVE);
if($search) {
$select->where->like('c.name', '%' . $search . '%');
}
$select->order('name ASC');
$records = $queryMapper->fetchAll($select);
$items = [];
foreach($records as $record)
{
$item = [
'name' => $record['name'],
'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid']]),
'link_unfollow' => $this->url()->fromRoute('company/unfollow', ['id' => $record['uuid']]),
];
array_push($items, $item);
}
$response = [
'success' => true,
'data' => $items,
'sql' => $select->getSqlString($this->adapter->platform)
];
return new JsonModel($response);
} else {
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/company/following-companies.phtml');
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
}