Rev 4842 | 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 LeadersLinked\Cache\CacheInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Mapper\CompanyFollowerMapper;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\UserLanguageMapper;use LeadersLinked\Mapper\UserSkillMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\UserEducationMapper;use LeadersLinked\Mapper\DegreeMapper;use LeadersLinked\Mapper\UserExperienceMapper;use LeadersLinked\Mapper\IndustryMapper;use LeadersLinked\Mapper\CompanySizeMapper;use LeadersLinked\Mapper\ConnectionMapper;use LeadersLinked\Mapper\UserBlockedMapper;use LeadersLinked\Model\Connection;use LeadersLinked\Model\Network;use LeadersLinked\Mapper\ProfileVisitMapper;use LeadersLinked\Model\ProfileVisit;use LeadersLinked\Mapper\QueryMapper;use Laminas\Paginator\Adapter\DbSelect;use Laminas\Paginator\Paginator;use LeadersLinked\Model\User;use Laminas\Db\Sql\Expression;use LeadersLinked\Mapper\LanguageMapper;use LeadersLinked\Mapper\SkillMapper;use LeadersLinked\Mapper\AptitudeMapper;use LeadersLinked\Mapper\UserAptitudeMapper;use LeadersLinked\Mapper\HobbyAndInterestMapper;use LeadersLinked\Mapper\UserHobbyAndInterestMapper;use LeadersLinked\Library\Functions;class ProfileController extends AbstractActionController{/**** @var AdapterInterface*/private $adapter;/**** @var CacheInterface*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @param AdapterInterface $adapter* @param CacheInterface $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(){$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/profile/index.phtml');return $viewModel ;}/*** 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(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork= $currentNetworkPlugin->getNetwork();$request = $this->getRequest();if($request->isGet()) {$flashMessenger = $this->plugin('FlashMessenger');$id = $this->params()->fromRoute('id');if(!$id) {$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');return $this->redirect()->toRoute('dashboard');}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);$userProfileMapper = UserProfileMapper::getInstance($this->adapter);if($user) {$userProfile = $userProfileMapper->fetchOnePublicByUserId($user->id);} else {$userProfile = $userProfileMapper->fetchOneByUuid($id);if($userProfile) {$user = $userMapper->fetchOne($userProfile->user_id);if($user && $currentUser->network_id != $user->network_id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}}}if(!$userProfile) {$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');return $this->redirect()->toRoute('dashboard');}$userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);$userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($userProfile->user_id, $currentUser->id);if($userBlocked) {$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');return $this->redirect()->toRoute('dashboard');}if($currentUser->id != $userProfile->user_id) {$visited_on = date('Y-m-d');;$profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);$profileVisit = $profileVisitMapper->fetchOneByVisitorIdAndVisitedIdAndVisitedOn($currentUser->id, $userProfile->user_id, $visited_on);if(!$profileVisit) {$profileVisit = new ProfileVisit();$profileVisit->user_profile_id = $userProfile->id;$profileVisit->visited_id = $userProfile->user_id;$profileVisit->visitor_id = $currentUser->id;$profileVisit->visited_on = date('Y-m-d');$profileVisitMapper->insert($profileVisit);}}if($userProfile->location_id) {$locationMapper= LocationMapper::getInstance($this->adapter);$location = $locationMapper->fetchOne($userProfile->location_id);$formattedAddress = $location->formatted_address;$country = $location->country;} else {$formattedAddress = '';$country = '';}$connectionMapper = ConnectionMapper::getInstance($this->adapter);$connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $userProfile->user_id);$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOne($userProfile->user_id);$userLanguages = [];$languageMapper = LanguageMapper::getInstance($this->adapter);$userLanguageMapper = UserLanguageMapper::getInstance($this->adapter);$records = $userLanguageMapper->fetchAllByUserProfileId($userProfile->id);foreach($records as $record){$language = $languageMapper->fetchOne($record->language_id);$userLanguages[$language->id] = $language->name;}$locationMapper = LocationMapper::getInstance($this->adapter);$degreeMapper = DegreeMapper::getInstance($this->adapter);$userEducationMapper = UserEducationMapper::getInstance($this->adapter);$userEducations = $userEducationMapper->fetchAllByUserProfileId($userProfile->id);foreach($userEducations as &$userEducation){$location = $locationMapper->fetchOne($userEducation->location_id);$degree = $degreeMapper->fetchOne($userEducation->degree_id) ;$userEducation = ['university' => $userEducation->university,'degree' => $degree->name,'field_of_study' => $userEducation->field_of_study,'grade_or_percentage' => $userEducation->grade_or_percentage,'formatted_address' => $location->formatted_address,'from_year' => $userEducation->from_year,'to_year' => $userEducation->to_year,'description' => $userEducation->description,];}/*$industries = [];$industryMapper = IndustryMapper::getInstance($this->adapter);$records = $industryMapper->fetchAllActive();foreach($records as $record){$industries[$record->uuid] = $record->name;}$companySizes = [];$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);$records = $companySizeMapper->fetchAllActive();foreach($records as $record){$companySizes[$record->uuid] = $record->name . ' ('.$record->minimum_no_of_employee . '-' . $record->maximum_no_of_employee .')';}*/$industryMapper = IndustryMapper::getInstance($this->adapter);$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);$userExperienceMapper = UserExperienceMapper::getInstance($this->adapter);$userExperiences = $userExperienceMapper->fetchAllByUserProfileId($userProfile->id);foreach($userExperiences as &$userExperience){$industry = $industryMapper->fetchOne($userExperience->industry_id);$companySize = $companySizeMapper->fetchOne($userExperience->company_size_id);$location = $locationMapper->fetchOne($userExperience->location_id);$userExperience = ['company' => $userExperience->company,'industry' => $industry->name,'size' => $companySize->name . ' (' . $companySize->minimum_no_of_employee . ' - ' . $companySize->maximum_no_of_employee . ' ) ','title' => $userExperience->title,'formatted_address' => $location->formatted_address,'from_year' => $userExperience->from_year,'from_month' => $userExperience->from_month,'to_year' => $userExperience->to_year,'to_month' => $userExperience->to_month,'description' => $userExperience->description,'is_current' => $userExperience->is_current,];}$userAptitudes = [];$aptitudeMapper = AptitudeMapper::getInstance($this->adapter);$userAptitudeMapper = UserAptitudeMapper::getInstance($this->adapter);$records = $userAptitudeMapper->fetchAllByUserProfileId($userProfile->id);foreach($records as $record){$aptitude = $aptitudeMapper->fetchOne($record->aptitude_id);if($aptitude) {$userAptitudes[$aptitude->uuid] = $aptitude->name;}}$userHobbiesAndInterests = [];$hobbyAndInterestMapper = HobbyAndInterestMapper::getInstance($this->adapter);$userHobbyAndInterestMapper = UserHobbyAndInterestMapper::getInstance($this->adapter);$records = $userHobbyAndInterestMapper->fetchAllByUserProfileId($userProfile->id);foreach($records as $record){$hobbyAndInterest = $hobbyAndInterestMapper->fetchOne($record->hobby_and_interest_id);if($hobbyAndInterest) {$userHobbiesAndInterests[$hobbyAndInterest->uuid] = $hobbyAndInterest->name;}}$userSkills = [];$skillMapper = SkillMapper::getInstance($this->adapter);$userSkillMapper = UserSkillMapper::getInstance($this->adapter);$records = $userSkillMapper->fetchAllByUserProfileId($userProfile->id);foreach($records as $record){$skill = $skillMapper->fetchOne($record->skill_id);if($skill) {$userSkills[$skill->uuid] = $skill->name;}}if($currentNetwork->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {$connectionMapper = ConnectionMapper::getInstance($this->adapter);$total_connections = $connectionMapper->fetchTotalConnectionByUser($user->id);$request_connection = 0;if($connection) {if($connection->status == Connection::STATUS_REJECTED || $connection->status == Connection::STATUS_CANCELLED) {$request_connection = 1;}} else {$request_connection = 1;}$common_connection = count($connectionMapper->fetchAllCommonConnectionsUserIdByUser1ReturnIds($currentUser->id, $userProfile->user_id));}$profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);$views = $profileVisitMapper->getTotalByVisitedId( $userProfile->user_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) {$data = ['user_id' => $user->uuid,'user_uuid' => ($user->uuid),'full_name' => trim($user->first_name . ' ' . $user->last_name),'user_profile_id' => $userProfile->id,'user_profile_uuid' => $userProfile->uuid,'image' => $this->url()->fromRoute('storage',['code' => $user->uuid, 'type' => 'user-profile', 'filename' => $user->image]),'cover' => $this->url()->fromRoute('storage',['code' => $user->uuid, 'type' => 'user-cover', 'filename' => $userProfile->cover]),'overview' => $userProfile->description,'facebook' => $userProfile->facebook,'instagram' => $userProfile->instagram,'twitter' => $userProfile->twitter,'formatted_address' => $formattedAddress,'country' => $country,'user_skills' => $userSkills,'user_languages' => $userLanguages,'user_educations' => $userEducations,'user_experiences' => $userExperiences,'user_aptitudes' => $userAptitudes,'user_hobbies_and_interests' => $userHobbiesAndInterests,'views' => $views,'show_contact' => $user->id != $currentUser->id,'link_inmail' => $this->url()->fromRoute('inmail',['id' => $user->uuid ]),];if($currentNetwork->default == Network::DEFAULT_YES) {$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);$data['following'] = $companyFollowerMapper->getCountFollowing($user->id);$data['view_following'] = 1;} else {$data['following'] = 0;$data['view_following'] = 0;}if($currentNetwork->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {$data['total_connections'] = $total_connections;$data['view_total_connections'] = 1;$data['request_connection'] = $request_connection;$data['common_connection'] = $common_connection;$data['link_cancel'] = $connection && $connection->status == Connection::STATUS_SENT ? $this->url()->fromRoute('connection/delete',['id' => $user->uuid ]) : $this->url()->fromRoute('connection/cancel',['id' => $user->uuid]);$data['link_request'] = $request_connection ? $this->url()->fromRoute('connection/request',['id' => $user->uuid ]) : '';} else {$data['total_connections'] = 0;$data['view_total_connections'] = 0;$data['request_connection'] = 0;$data['common_connection'] = 0;$data['link_cancel'] = '';$data['link_request'] = '';}return new JsonModel($data);} else {if($currentNetwork->relationship_user_mode == Network::RELATIONSHIP_USER_MODE_USER_2_USER) {$data = ['total_connections' => $total_connections,'view_total_connections' => 1,'user_id' => $user->uuid,'user_uuid' => ($user->uuid),'full_name' => trim($user->first_name . ' ' . $user->last_name),'user_profile_id' => $userProfile->id,'user_profile_uuid' => $userProfile->uuid,'image' => $userProfile->image,'cover' => $userProfile->cover,'overview' => $userProfile->description,'facebook' => $userProfile->facebook,'instagram' => $userProfile->instagram,'twitter' => $userProfile->twitter,'formatted_address' => $formattedAddress,'country' => $country,'user_skills' => $userSkills,'user_languages' => $userLanguages,'user_educations' => $userEducations,'user_experiences' => $userExperiences,'user_aptitudes' => $userAptitudes,'user_hobbies_and_interests' => $userHobbiesAndInterests,'show_contact' => $user->id != $currentUser->id,'request_connection' => $request_connection,'link_cancel' => $connection && $connection->status == Connection::STATUS_SENT ? $this->url()->fromRoute('connection/delete',['id' => $user->uuid ]) : $this->url()->fromRoute('connection/cancel',['id' => $user->uuid]),'link_request' => $request_connection ? $this->url()->fromRoute('connection/request',['id' => $user->uuid ]) : '','link_inmail' => $this->url()->fromRoute('inmail',['id' => $user->uuid ]),];} else {$data = ['total_connections' => 0,'view_total_connections' => 0,'user_id' => $user->uuid,'user_uuid' => ($user->uuid),'full_name' => trim($user->first_name . ' ' . $user->last_name),'user_profile_id' => $userProfile->id,'user_profile_uuid' => $userProfile->uuid,'image' => $userProfile->image,'cover' => $userProfile->cover,'overview' => $userProfile->description,'facebook' => $userProfile->facebook,'instagram' => $userProfile->instagram,'twitter' => $userProfile->twitter,'formatted_address' => $formattedAddress,'country' => $country,'user_skills' => $userSkills,'user_languages' => $userLanguages,'user_educations' => $userEducations,'user_experiences' => $userExperiences,'user_aptitudes' => $userAptitudes,'user_hobbies_and_interests' => $userHobbiesAndInterests,'show_contact' => $user->id != $currentUser->id,'request_connection' => 0,'link_cancel' => '','link_request' => '','link_inmail' => $this->url()->fromRoute('inmail',['id' => $user->uuid ]),];}if($currentNetwork->default == Network::DEFAULT_YES) {$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);$data['following'] = $companyFollowerMapper->getCountFollowing($user->id);$data['view_following'] = 1;} else {$data['following'] = 0;$data['view_following'] = 0;}$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/profile/view.phtml');$viewModel->setVariables($data);return $viewModel ;}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function peopleViewedProfileAction(){$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) {$page = (int) $this->params()->fromQuery('page');$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$mapper = QueryMapper::getInstance($this->adapter);$select = $mapper->getSql()->select();$select->columns(['visitor_id' => new Expression('DISTINCT(visitor_id)')]);$select->from(['p' => ProfileVisitMapper::_TABLE]);$select->join(['u' => UserMapper::_TABLE], 'p.visitor_id = u.id ', ['uuid', 'first_name', 'last_name', 'image']);$select->where->equalTo('p.visited_id', $currentUser->id)->and->equalTo('u.status', User::STATUS_ACTIVE);if($search) {$select->where->NEST->like('first_name', '%' . $search . '%')->or->like('last_name', '%' . $search . '%')->UNNEST;}$select->order('first_name','last_name');//echo $select->getSqlString($this->adapter->platform); exit;$dbSelect = new DbSelect($select, $this->adapter);$paginator = new Paginator($dbSelect);$paginator->setCurrentPageNumber($page ? $page : 1);$paginator->setItemCountPerPage(10);$items = [];$records = $paginator->getCurrentItems();foreach($records as $record){$item = ['name' => trim($record['first_name'] . ' ' . $record['last_name']),'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $record['uuid'], 'filename' => $record['image'] ]),'link_view' => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),'link_inmail' => $this->url()->fromRoute('inmail', ['id' => $record['uuid'] ]),];array_push($items, $item);}$response = ['success' => true,'data' => ['total' => ['count' => $paginator->getTotalItemCount(),'pages' => $paginator->getPages()->pageCount,],'current' => ['items' => $items,'page' => $paginator->getCurrentPageNumber(),'count' => $paginator->getCurrentItemCount(),]]];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/profile/people-viewed-profile.phtml');return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}}