Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5776 | Rev 6481 | 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;
use Laminas\Mvc\I18n\Translator;

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();
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');

        $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);
            }
        }
        
        if ($currentUserPlugin->hasIdentity()) {
            $this->layout()->setTemplate('layout/layout.phtml');
        } else {
            $this->layout()->setTemplate('layout/share.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();
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');

        $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);
            }
        }


        if ($currentUserPlugin->hasIdentity()) {
            $this->layout()->setTemplate('layout/layout.phtml');
        } else {
            $this->layout()->setTemplate('layout/share.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();
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');


        $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);
            }
        }


        if ($currentUserPlugin->hasIdentity()) {
            $this->layout()->setTemplate('layout/layout.phtml');
        } else {
            $this->layout()->setTemplate('layout/share.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();
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');


        $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);
            }
        }

        if ($currentUserPlugin->hasIdentity()) {
            $this->layout()->setTemplate('layout/layout.phtml');
        } else {
            $this->layout()->setTemplate('layout/share.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);
        }
    }
    
    public function languageAction()
    {
        $request = $this->getRequest();
 
        if ($request->isGet()) {
            
     
            
            $pathname = dirname(__DIR__);
            $filename = $pathname . DIRECTORY_SEPARATOR . 'i18n' . DIRECTORY_SEPARATOR . 'spanish.php';
            
            
            if(file_exists($filename)) {
                
                $arr =  include $filename;
                $arr = array_filter($arr, function($a)  {
                    return strpos($a, 'LABEL_') !== false;
                }, ARRAY_FILTER_USE_KEY); 
                
                
                $data = [];
                foreach($arr as $key => $value) 
                {
                    $key = str_replace('LABEL_', 'LANG_', $key);
                    
                    $data[ $key ] = $value;
                     
                }
                
                
                
                $response = [
                    'success' => true,
                    'data' => $data
                ];
                
                return new JsonModel($response);
                
                
            } else {
                $response = [
                    'success' => false,
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
                ];
                
                return new JsonModel($response);
            }
            
            
            
            
            
        } else {
            $response = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($response);
        }

        
    }
}