Rev 6849 | 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\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\DailyPulseEmojiMapper;
use LeadersLinked\Mapper\DailyPulseRecordMapper;
use LeadersLinked\Mapper\EngagementUserMapper;
use LeadersLinked\Model\DailyPulseRecord;
use LeadersLinked\Model\DailyPulseEmoji;
use LeadersLinked\Mapper\EngagementMapper;
use LeadersLinked\Model\EngagementUser;
use LeadersLinked\Mapper\EngagementRecordMapper;
use LeadersLinked\Model\EngagementRecord;
use LeadersLinked\Cache\CacheInterface;
use Laminas\Mvc\I18n\Translator;
class DailyPulseController extends AbstractActionController
{
/**
*
* @var \Laminas\Db\Adapter\AdapterInterface
*/
private $adapter;
/**
*
* @var \LeadersLinked\Cache\CacheInterface
*/
private $cache;
/**
*
* @var \Laminas\Log\LoggerInterface
*/
private $logger;
/**
*
* @var array
*/
private $config;
/**
*
* @var \Laminas\Mvc\I18n\Translator
*/
private $translator;
/**
*
* @param \Laminas\Db\Adapter\AdapterInterface $adapter
* @param \LeadersLinked\Cache\CacheInterface $cache
* @param \Laminas\Log\LoggerInterface LoggerInterface $logger
* @param array $config
* @param \Laminas\Mvc\I18n\Translator $translator
*/
public function __construct($adapter, $cache, $logger, $config, $translator)
{
$this->adapter = $adapter;
$this->cache = $cache;
$this->logger = $logger;
$this->config = $config;
$this->translator = $translator;
}
public function indexAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
$request = $this->getRequest();
if($request->isGet()) {
$emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
$engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
$engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($engagementUser) {
$points = $engagementUser->points;
} else {
$points = 0;
}
$dailyRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
$howAreYouFeelRecord = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
$climateOnYourOrganization = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
$emojis_how_are_you_feel = [];
$emojis_climate_on_your_organization = [];
$records = $emojiMapper->fetchAllActiveByCompanyId($company->id);
foreach($records as $record)
{
if($record->type == DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
if($howAreYouFeelRecord) {
$link_save = '';
if($howAreYouFeelRecord->emoji_id != $record->id) {
continue;
}
} else {
$link_save = $this->url()->fromRoute('daily-pulse/how_are_you_feel', ['id' => $record->uuid]);
}
array_push($emojis_how_are_you_feel, [
'id' => $record->uuid,
'link_save' => $link_save,
'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
]);
}
if($record->type == DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
if($climateOnYourOrganization) {
$link_save = '';
if($climateOnYourOrganization->emoji_id != $record->id) {
continue;
}
} else {
$link_save = $this->url()->fromRoute('daily-pulse/climate_on_your_organization', ['id' => $record->uuid]);
}
array_push($emojis_climate_on_your_organization, [
'id' => $record->uuid,
'link_save' => $link_save,
'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
]);
}
}
$data = [
'success' => true,
'data' => [
'points' => $points,
'emojis_how_are_you_feel' => $emojis_how_are_you_feel,
'emojis_climate_on_your_organization' => $emojis_climate_on_your_organization,
]
];
return new JsonModel($data);
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($data);
}
return new JsonModel($data);
}
public function howAreYouFeelAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
$id = $this->params()->fromRoute('id');
$emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
$emoji = $emojiMapper->fetchOneByUuid($id);
if(!$emoji) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
];
return new JsonModel($data);
}
if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
];
return new JsonModel($data);
}
if($emoji->type != DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
];
return new JsonModel($data);
}
if($emoji->company_id != $company->id) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
$request = $this->getRequest();
if($request->isPost()) {
$dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
$dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
if($dailyPulse) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
];
} else {
$engagementMapper = EngagementMapper::getInstance($this->adapter);
$engagement = $engagementMapper->fetchOneByCompanyId($company->id);
$dailyPulse = new DailyPulseRecord();
$dailyPulse->company_id = $company->id;
$dailyPulse->user_id = $currentUser->id;
$dailyPulse->emoji_id = $emoji->id;
$dailyPulse->type = DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL;
$dailyPulse->engagement = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
$dailyPulse->points = $emoji->points;
$result = $dailyPulseRecordMapper->insert($dailyPulse);
if($result) {
if($engagement) {
$engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
$engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($engagementUser) {
$engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
$engagementUserMapper->update( $engagementUser );
} else {
$engagementUser = new EngagementUser();
$engagementUser->company_id = $company->id;
$engagementUser->user_id = $currentUser->id;
$engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
$engagementUserMapper->insert( $engagementUser );
}
$engagementRecord = new EngagementRecord();
$engagementRecord->company_id = $company->id;
$engagementRecord->user_id = $currentUser->id;
$engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
$engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
$engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
$engagementRecordMapper->insert($engagementRecord);
}
$data = [
'success' => true,
'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
];
} else {
$data = [
'success' => false,
'data' => $dailyPulseRecordMapper->getError()
];
}
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($data);
}
public function climateOnYourOrganizationAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
$currentNetwork = $currentNetworkPlugin->getNetwork();
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
$id = $this->params()->fromRoute('id');
$emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
$emoji = $emojiMapper->fetchOneByUuid($id);
if(!$emoji) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
];
return new JsonModel($data);
}
if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
];
return new JsonModel($data);
}
if($emoji->type != DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
];
return new JsonModel($data);
}
if($emoji->company_id != $company->id) {
$data = [
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
];
return new JsonModel($data);
}
$request = $this->getRequest();
if($request->isPost()) {
$dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
$dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
if($dailyPulse) {
$data = [
'success' => false,
'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
];
} else {
$engagementMapper = EngagementMapper::getInstance($this->adapter);
$engagement = $engagementMapper->fetchOneByCompanyId($company->id);
$dailyPulse = new DailyPulseRecord();
$dailyPulse->company_id = $company->id;
$dailyPulse->user_id = $currentUser->id;
$dailyPulse->emoji_id = $emoji->id;
$dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
$dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
$dailyPulse->points = $emoji->points;
$result = $dailyPulseRecordMapper->insert($dailyPulse);
if($result) {
if($engagement) {
$engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
$engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
if($engagementUser) {
$engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_climate_on_your_organization : 0);
$engagementUserMapper->update( $engagementUser );
} else {
$engagementUser = new EngagementUser();
$engagementUser->company_id = $company->id;
$engagementUser->user_id = $currentUser->id;
$engagementUser->points = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
$engagementUserMapper->insert( $engagementUser );
}
$engagementRecord = new EngagementRecord();
$engagementRecord->company_id = $company->id;
$engagementRecord->user_id = $currentUser->id;
$engagementRecord->points = $engagement->daily_pulse_climate_on_your_organization;
$engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_CLIMATE_ON_YOUR_ORGANIZATION;
$engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
$engagementRecordMapper->insert($engagementRecord);
}
$data = [
'success' => true,
'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
];
} else {
$data = [
'success' => false,
'data' => $dailyPulseRecordMapper->getError()
];
}
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
}
return new JsonModel($data);
}
}