Rev 1302 | Rev 2953 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
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\Model\Page;
use LeadersLinked\Mapper\NotificationMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyUserMapper;
use LeadersLinked\Model\Company;
use LeadersLinked\Mapper\PageMapper;
use LeadersLinked\Mapper\MessageMapper;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Mapper\UserProfileMapper;
use LeadersLinked\Mapper\CompanyUserRoleMapper;
use LeadersLinked\Model\Role;
use LeadersLinked\Library\Functions;
use LeadersLinked\Mapper\ConnectionMapper;
use LeadersLinked\Mapper\LocationMapper;
use LeadersLinked\Mapper\PostMapper;
use LeadersLinked\Mapper\ProfileVisitMapper;
use LeadersLinked\Model\Post;
class HomeController 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;
}
public function indexAction()
{
$authService = new \Laminas\Authentication\AuthenticationService();
if ($authService->hasIdentity()) {
return $this->redirect()->toRoute('dashboard');
} else {
return $this->redirect()->toRoute('signin');
}
}
public function dashboardAction()
{
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/dashboard.phtml');
return $viewModel;
}
public function privacyPolicyAction()
{
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOne(Page::PAGE_ID_PRIVACY_POLICY);
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/privacy-policy.phtml');
$viewModel->setVariable('page', $page);
return $viewModel;
}
public function cookiesAction()
{
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOne(Page::PAGE_ID_COOKIES);
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/cookies.phtml');
$viewModel->setVariable('page', $page);
return $viewModel;
}
public function professionalismPolicyAction()
{
//
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOne(Page::PAGE_ID_PROFESSIONALISM_POLICY);
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/professionalism-policy');
$viewModel->setVariable('page', $page);
return $viewModel;
}
public function termsAndConditionsAction()
{
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOne(Page::PAGE_ID_TERMS_AND_CONDITIONS);
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/terms-and-conditions.phtml');
$viewModel->setVariable('page', $page);
return $viewModel;
}
public function checkSessionAction()
{
$request = $this->getRequest();
if ($request->isGet()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
if (!$currentUserPlugin->hasIdentity()) {
$flashMessenger = $this->plugin('FlashMessenger');
$flashMessenger->addErrorMessage('ERROR_SESSION_NOT_FOUND');
$response = [
'success' => false,
'data' => [
'message' => 'ERROR_SESSION_NOT_FOUND',
'url' => $this->url()->fromRoute('signout')
]
];
return new JsonModel($response);
}
$currentUser = $currentUserPlugin->getUser();
if ($currentUser->last_activity_on) {
$last_activity_on = strtotime($currentUser->last_activity_on);
} else {
$last_activity_on = strtotime('-1 day');
}
$expiry_time = $last_activity_on + $this->config['leaderslinked.security.last_activity_expired'];
if (time() > $expiry_time) {
//$flashMessenger = $this->plugin('FlashMessenger');
//$flashMessenger->addErrorMessage('ERROR_SESSION_EXPIRED');
$response = [
'success' => false,
'data' => [
'message' => 'ERROR_SESSION_EXPIRED',
'url' => $this->url()->fromRoute('signout')
]
];
} else {
$notificationMapper = NotificationMapper::getInstance($this->adapter);
$total_notifications = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
$messageMapper = MessageMapper::getInstance($this->adapter);
$total_messages = $messageMapper->fetchCountUnreadMessagesReceiverId($currentUser->id);
$response = [
'success' => true,
'data' => [
'total_notifications' => $total_notifications,
'total_messages' => $total_messages
]
];
}
} else {
$response = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($response);
}
public function notificationsAction()
{
$request = $this->getRequest();
if ($request->isGet()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$userMapper = UserMapper::getInstance($this->adapter);
$user = $userMapper->fetchOne($currentUser->id);
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
$userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->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) {
$notificationMapper = NotificationMapper::getInstance($this->adapter);
$records = $notificationMapper->fetchAllsUnreadByUserId($currentUser->id);
$items = [];
foreach ($records as $record) {
$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
array_push($items, [
'message' => $record->message,
'link' => $record->url,
'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp())
]);
}
$response = [
'success' => true,
'data' => $items
];
} else {
if ($user->location_id) {
$locationMapper = LocationMapper::getInstance($this->adapter);
$location = $locationMapper->fetchOne($user->location_id);
$country = $location->country;
} else {
$country = '';
}
$profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);
$visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);
$connectionMapper = ConnectionMapper::getInstance($this->adapter);
$connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setVariables([
'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
'fullname' => trim($user->first_name . ' ' . $user->last_name),
'description' => empty($userProfile->description) ? '' : trim($userProfile->description),
'country' => $country,
'visits' => $visits,
'connections' => $connections
]);
$viewModel->setTemplate('leaders-linked/home/notifications.phtml');
return $viewModel;
}
} else {
$response = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($response);
}
public function postAction()
{
$id = $this->params()->fromRoute('id');
$postMapper = PostMapper::getInstance($this->adapter);
$post = $postMapper->fetchOneByUuid($id);
if (!$post || $post->status != Post::STATUS_ACTIVE) {
$flashMessenger = $this->plugin('FlashMessenger');
if (!$id) {
$flashMessenger->addErrorMessage('ERROR_POST_NOT_AVAILABLE');
return $this->redirect()->toRoute('dashboard');
}
}
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/post.phtml');
$viewModel->setVariable('post', $post);
return $viewModel;
}
}