Rev 4778 | Rev 5700 | 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;
use LeadersLinked\Mapper\UtilMapper;
use LeadersLinked\Mapper\FeedMapper;
use LeadersLinked\Model\Feed;
use LeadersLinked\Model\User;
use LeadersLinked\Model\Connection;
use LeadersLinked\Mapper\NetworkMapper;
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()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
if ($currentUserPlugin->hasIdentity()) {
return $this->redirect()->toRoute('dashboard');
} else {
return $this->redirect()->toRoute('signin');
}
}
public function privacyPolicyAction()
{
$pageCode = Page::PAGE_CODE_PRIVACY_POLICY;
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $currentNetwork->id);
if(!$page) {
$networkMapper = NetworkMapper::getInstance($this->adapter);
$network = $networkMapper->fetchOneByDefault();
$pageDefault = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $network->id);
if($pageDefault) {
$page = new Page();
$page->network_id = $currentNetwork->id;
$page->code = $pageDefault->code;
$page->content = $pageDefault->content;
$page->fixed = $pageDefault->fixed;
$page->page_default_id = $pageDefault->id;
$page->title = $pageDefault->title;
$page->status = $pageDefault->status;
$page->type = $pageDefault->type;
$page->url = $pageDefault->url;
$pageMapper->insert($page);
}
}
$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()
{
$pageCode = Page::PAGE_CODE_COOKIES;
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $currentNetwork->id);
if(!$page) {
$networkMapper = NetworkMapper::getInstance($this->adapter);
$network = $networkMapper->fetchOneByDefault();
$pageDefault = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $network->id);
if($pageDefault) {
$page = new Page();
$page->network_id = $currentNetwork->id;
$page->code = $pageDefault->code;
$page->content = $pageDefault->content;
$page->fixed = $pageDefault->fixed;
$page->page_default_id = $pageDefault->id;
$page->title = $pageDefault->title;
$page->status = $pageDefault->status;
$page->type = $pageDefault->type;
$page->url = $pageDefault->url;
$pageMapper->insert($page);
}
}
$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()
{
$pageCode = Page::PAGE_CODE_PROFESSIONALISM_POLICY;
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $currentNetwork->id);
if(!$page) {
$networkMapper = NetworkMapper::getInstance($this->adapter);
$network = $networkMapper->fetchOneByDefault();
$pageDefault = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $network->id);
if($pageDefault) {
$page = new Page();
$page->network_id = $currentNetwork->id;
$page->code = $pageDefault->code;
$page->content = $pageDefault->content;
$page->fixed = $pageDefault->fixed;
$page->page_default_id = $pageDefault->id;
$page->title = $pageDefault->title;
$page->status = $pageDefault->status;
$page->type = $pageDefault->type;
$page->url = $pageDefault->url;
$pageMapper->insert($page);
}
}
$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()
{
$pageCode = Page::PAGE_CODE_TERMS_AND_CONDITIONS;
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$pageMapper = PageMapper::getInstance($this->adapter);
$page = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $currentNetwork->id);
if(!$page) {
$networkMapper = NetworkMapper::getInstance($this->adapter);
$network = $networkMapper->fetchOneByDefault();
$pageDefault = $pageMapper->fetchOneByCodeAndNetworkId($pageCode, $network->id);
if($pageDefault) {
$page = new Page();
$page->network_id = $currentNetwork->id;
$page->code = $pageDefault->code;
$page->content = $pageDefault->content;
$page->fixed = $pageDefault->fixed;
$page->page_default_id = $pageDefault->id;
$page->title = $pageDefault->title;
$page->status = $pageDefault->status;
$page->type = $pageDefault->type;
$page->url = $pageDefault->url;
$pageMapper->insert($page);
}
}
$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 incTotalExternalSharedAction()
{
$request = $this->getRequest();
if ($request->isPost()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$code = $this->params()->fromRoute('code');
$type = $this->params()->fromRoute('type');
$user = $this->params()->fromRoute('user');
$timestamp = intval($this->params()->fromRoute('timestamp'), 10);
$rand = intval($this->params()->fromRoute('rand'), 10);
$password = $this->params()->fromRoute('password');
$checkpassword = '';
$userCheck = '';
if($user && $timestamp > 0 && $rand > 0 && $password) {
$userMapper = UserMapper::getInstance($this->adapter);
$userCheck = $userMapper->fetchOneByUuid($user);
if($userCheck) {
$checkpassword = md5('user-' . $userCheck->uuid . '-'.$type.'-' . $code . '-timestamp-' . $timestamp . '-rand-' . $rand . '-share-key-' . $userCheck->share_key) ;
}
}
if(empty($password) || $password != $checkpassword) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
if($type == 'feed' && $code ) {
$feedMapper = FeedMapper::getInstance($this->adapter);
$feed = $feedMapper->fetchOneByUuidAnyStatus($code);
if($feed) {
if($feed->network_id != $currentNetwork->id) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
if($feedMapper->incTotalExternalShared($feed->id)) {
$total = $feedMapper->fetchTotalExternalShared($feed->id);
$this->logger->info('El usuario : ' . trim($currentUser->first_name . ' ' . $currentUser->last_name) . ' (' . $currentUser->email . ') compartio externamente el feed : ' . $feed->title);
$data = [
'success' => true,
'data' => $total,
];
return new JsonModel($data);
} else {
$data = [
'success' => false,
'data' => $feedMapper->getError()
];
return new JsonModel($data);
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_FEED_NOT_FOUND',
];
return new JsonModel($data);
}
} else if ($type == 'post' && $code) {
$postMapper = PostMapper::getInstance($this->adapter);
$post = $postMapper->fetchOneByUuid($code);
if($post && $post->status == Post::STATUS_ACTIVE) {
if($post->network_id != $currentNetwork->id) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
if($postMapper->incTotalExternalShared($post->id)) {
$total = $postMapper->fetchTotalExternalShared($post->id);
$this->logger->info('El usuario : ' . trim($currentUser->first_name . ' ' . $currentUser->last_name) . ' (' . $currentUser->email . ') compartio externamente el post : ' . $post->title);
$data = [
'success' => true,
'data' => $total,
];
return new JsonModel($data);
} else {
$data = [
'success' => false,
'data' => $postMapper->getError()
];
return new JsonModel($data);
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_POST_NOT_FOUND'
];
return new JsonModel($data);
}
}
} else {
$response = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($response);
}
}
public function shareAction()
{
$request = $this->getRequest();
if ($request->isGet()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$code = $this->params()->fromRoute('code');
$type = $this->params()->fromRoute('type');
$user = $this->params()->fromRoute('user');
$timestamp = intval($this->params()->fromRoute('timestamp'), 10);
$rand = intval($this->params()->fromRoute('rand'), 10);
$password = $this->params()->fromRoute('password');
$checkpassword = '';
$userCheck = '';
if($user && $timestamp > 0 && $rand > 0 && $password) {
$userMapper = UserMapper::getInstance($this->adapter);
$userCheck = $userMapper->fetchOneByUuid($user);
if($userCheck) {
$checkpassword = md5('user-' . $userCheck->uuid . '-'.$type.'-' . $code . '-timestamp-' . $timestamp . '-rand-' . $rand . '-share-key-' . $userCheck->share_key) ;
}
}
if(empty($password) || $password != $checkpassword) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
/*
$share_params = [
'type' => $type,
'code' => $code,
'user' => $currentUser->uuid,
'timestamp' => $timestamp,
'rand' => $rand,
'password' => $password,
];
$share_increment_external_counter_url = $this->url()->fromRoute('share/increment-external-counter', $share_params , ['force_canonical' => true]);
*/
if(strpos(strtolower($_SERVER['REQUEST_SCHEME']), 'https') === false) {
$base_share = 'http://' . $_SERVER['HTTP_HOST'];
} else {
$base_share = 'https://' . $_SERVER['HTTP_HOST'];
}
/*
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
*/
$share_url = $base_share . $_SERVER['REQUEST_URI'];
$share_image = $base_share . '/images/ll-logo.png';
$share_title = '';
$share_description = '';
if($type == 'feed' && $code ) {
$feedMapper = FeedMapper::getInstance($this->adapter);
$feed = $feedMapper->fetchOneByUuidAnyStatus($code);
// if($feed && $feed->status == Feed::STATUS_PUBLISHED) {
if($feed) {
$share_title = $feed->title ? $feed->title : '';
if($feed->posted_or_shared == Feed::SHARED) {
$feed = $feedMapper->fetchOneAnyStatus($feed->shared_feed_id);
if($feed->title) {
$share_title = $share_title . ' - ' .$feed->title;
}
}
$share_description = $feed->description;
$image_name = '';
if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
$image_name = $feed->file_name;
} else if($feed->file_image_preview) {
$image_name = $feed->file_image_preview;
}
if( $image_name ) {
$source = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid . DIRECTORY_SEPARATOR . $image_name;
$target_path = 'public' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'feed'. DIRECTORY_SEPARATOR . $feed->uuid;
if(!file_exists($target_path)) {
mkdir($target_path, 0755, true);
}
$target = $target_path . DIRECTORY_SEPARATOR . $image_name;
if(!file_exists($target)) {
copy($source, $target);
$share_image = $base_share . '/images/feed/' . $feed->uuid . '/' . $image_name;
} else {
$share_image = $base_share . '/images/feed/' . $feed->uuid . '/' . $image_name;
}
}
} else {
if($currentUserPlugin->hasIdentity()) {
$this->layout()->setTemplate('layout/layout.phtml');
} else {
$this->layout()->setTemplate('layout/share.phtml');
}
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/error/404.phtml');
return $viewModel;
}
} else if ($type == 'post' && $code) {
$postMapper = PostMapper::getInstance($this->adapter);
$post = $postMapper->fetchOneByUuid($code);
if($post && $post->status == Post::STATUS_ACTIVE) {
$share_title = $post->title;
$share_description = $post->description;
if($post->image) {
$source = $this->config['leaderslinked.fullpath.post'] . $post->uuid . DIRECTORY_SEPARATOR . $post->image;
$target_path = 'public' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'post'. DIRECTORY_SEPARATOR . $post->uuid;
if(!file_exists($target_path)) {
mkdir($target_path, 0755, true);
}
$target = $target_path . DIRECTORY_SEPARATOR . $post->image;
if(!file_exists($target)) {
copy($source, $target);
$share_image = $base_share . '/images/post/' . $post->uuid . '/' . $post->image;
} else {
$share_image = $base_share . '/images/post/' . $post->uuid . '/' . $post->image;
}
}
} else {
if($currentUserPlugin->hasIdentity()) {
$this->layout()->setTemplate('layout/layout.phtml');
} else {
$this->layout()->setTemplate('layout/share.phtml');
}
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/error/404.phtml');
return $viewModel;
}
}
/*
echo '<pre>';
print_r([ 'share_image' => $share_image,
'share_url' => $share_url,
'share_title' => strip_tags($share_title),
'share_description' => strip_tags($share_description)]); echo '</pre>';
exit;
*/
if($currentUserPlugin->hasIdentity()) {
$currentUser = $currentUserPlugin->getUser();
if($userCheck && $userCheck->status == User::STATUS_ACTIVE && $userCheck->id != $currentUser->id ) {
$connectionMapper = ConnectionMapper::getInstance($this->adapter);
$connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $userCheck->id);
if($connection) {
if($connection->status != Connection::STATUS_ACCEPTED) {
$connectionMapper->approve($connection);
}
} else {
$connection = new Connection();
$connection->request_from = $currentUser->id;
$connection->request_to = $userCheck->id;
$connection->status = Connection::STATUS_ACCEPTED;
$connectionMapper->insert($connection);
}
}
$this->layout()->setTemplate('layout/layout.phtml');
} else {
$this->cache->addItem('user_share_invitation', $user);
$this->layout()->setTemplate('layout/share.phtml');
}
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/home/share.phtml');
$viewModel->setVariables([
'share_image' => $share_image,
'share_url' => $share_url,
'share_title' => strip_tags($share_title),
'share_description' => strip_tags($share_description),
// 'share_increment_external_counter_url' => $share_increment_external_counter_url,
]);
return $viewModel;
} else {
$response = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($response);
}
}
}