Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3768 | Rev 4808 | 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 postAction()
    {
        $request = $this->getRequest();
        if ($request->isGet()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            
            $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');
                }
            }
            
            
            /*
            $timestamp = time();
      
            list($usec, $sec) = explode(' ', microtime());
            $seed = intval($sec + ((float) $usec * 100000));
            mt_srand($seed, MT_RAND_MT19937);
            $rand =  mt_rand();
            
            

            $password  = md5('user-' . $currentUser->uuid . '-post-' . $post->uuid . '-timestamp-' . $timestamp . '-rand-' . $rand . '-share-key-' . $currentUser->share_key) ;
            
            
            $share_params = [
                'type' => 'post',
                'code' => $post->uuid,
                'user' => $currentUser->uuid,
                'timestamp' => $timestamp,
                'rand' => $rand,
                'password' => $password,
            ];
            
            
            $share_external_url = $this->url()->fromRoute('share',$share_params  , ['force_canonical' => true]);
            */
            
            $share_external_url = $this->url()->fromRoute('shorter/generate', ['code' => $post->uuid, 'type' => 'post' ]  , ['force_canonical' => true]);
            
            
            
            $this->layout()->setTemplate('layout/layout.phtml');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/home/post.phtml');
            $viewModel->setVariables([
                'post' => $post,
                'id' => $post->id,
                'uuid' => $post->uuid,
                'title' => $post->title,
                'description' => $post->description,
                'url' => $post->url,
                'date' => $post->date,
                'status' => $post->status,
                'image' => $post->image,
                'file' => $post->file,
                'added_on' => $post->added_on,
                'share_external_url' =>  $share_external_url,
                
            ]);
            return $viewModel;
            
        } 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);
            }
           
            
            
            
            

            
            
            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),

            ]);

            
            return $viewModel;
            

        } else {
            $response = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($response);
        }
        
       
    }
    
   
}