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\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
use LeadersLinked\Form\Service\CapsuleCommentForm;
use LeadersLinked\Model\CompanyMicrolearningCapsuleComment;
use LeadersLinked\Mapper\UserMapper;
class ServiceCapsuleCommentsController 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()
{
$request = $this->getRequest();
if($request->isGet()) {
$serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$capsule_id = $this->params()->fromRoute('capsule_id');
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
if(!$capsule) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CAPSULE_NOT_FOUND'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
if(! $capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
]);
}
$userMapper = UserMapper::getInstance($this->adapter);
$users = [];
$capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
$records = $capsuleCommentMapper->fetchAllByCapsuleId($capsule->id);
$comments = [];
foreach($records as $record)
{
if(isset($users[$record->user_id])) {
$user = $users[$record->user_id];
} else {
$user = $userMapper->fetchOne($record->user_id);
if(!$user) {
continue;
}
$users[$record->user_id] = $user;
}
$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
array_push($comments, [
'date' => $dt->format($serviceDatetimeFormat),
'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image], ['force_canonical' => true]),
'fullname' => trim(trim($user->first_name) . ' ' . trim($user->last_name)),
'rating' => strval($record->rating),
'comment' => $record->comment,
'link_delete' => $record->user_id == $currentUser->id ? $this->url()->fromRoute('services/microlearning/capsules/comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $record->uuid], ['force_canonical' => true]) : '',
]);
}
$dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
return new JsonModel([
'success' => true,
'data' => [
'comments' => $comments,
'capsule' => [
'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
]
]
]);
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
public function deleteAction()
{
$request = $this->getRequest();
if($request->isPost()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$capsule_id = $this->params()->fromRoute('capsule_id');
$comment_id = $this->params()->fromRoute('comment_id');
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
if(!$capsule) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CAPSULE_NOT_FOUND'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
if(! $capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
]);
}
$capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
$capsuleComment = $capsuleCommentMapper->fetchOneByUuid($comment_id);
if(!$capsuleComment) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CAPSULE_COMMENT_NOT_FOUND',
]);
}
if($capsuleComment->capsule_id != $capsule->id || $capsuleComment->user_id != $currentUser->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE_COMMENT',
]);
}
$result = $capsuleCommentMapper->delete($capsuleComment->id);
if($result) {
$dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
return new JsonModel([
'success' => true,
'data' => [
'message' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_DELETE',
'capsule' => [
'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
]
],
]);
} else {
return new JsonModel([
'success' => false,
'data' => $capsuleCommentMapper->getError()
]);
}
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
public function addAction()
{
$request = $this->getRequest();
if($request->isPost()) {
$serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$capsule_id = $this->params()->fromRoute('capsule_id');
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
if(!$capsule) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CAPSULE_NOT_FOUND'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
if(! $capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
]);
}
//$rawdata = file_get_contents("php://input");
// error_log('$rawdata = ' . $rawdata );
$form = new CapsuleCommentForm();
$dataPost = $request->getPost()->toArray();
if(!empty($dataPost['added_on'])) {
$dt = \DateTime::createFromFormat($serviceDatetimeFormat, $dataPost['added_on']);
if(!$dt) {
$dataPost['added_on'] = '';
}
}
$form->setData($dataPost);
if($form->isValid()) {
$dataPost = (array) $form->getData();
$serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
$dt = \DateTime::createFromFormat($serviceDatetimeFormat, $dataPost['added_on']);
$capsuleComment = new CompanyMicrolearningCapsuleComment();
$capsuleComment->company_id = $capsule->company_id;
$capsuleComment->topic_id = $capsule->topic_id;
$capsuleComment->capsule_id = $capsule->id;
$capsuleComment->user_id = $currentUser->id;
$capsuleComment->comment = $dataPost['comment'];
$capsuleComment->rating = strval($dataPost['rating']);
$capsuleComment->added_on = $dt->format('Y-m-d H:i:s');
$capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
$result = $capsuleCommentMapper->insert($capsuleComment);
if($result) {
$capsuleComment = $capsuleCommentMapper->fetchOne($capsuleComment->id);
$dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
return new JsonModel([
'success' => true,
'data' => [
'message' =>'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_ADDED',
'comment' => [
'comment' => $capsuleComment->comment,
'rating' => $capsuleComment->rating,
'link_delete' => $this->url()->fromRoute('services/microlearning/capsules/comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $capsuleComment->uuid], ['force_canonical' => true])
],
'capsule' => [
'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
]
]
]);
} else {
return new JsonModel([
'success' => false,
'data' => $capsuleCommentMapper->getError()
]);
}
} else {
$messages = [];
$form_messages = (array) $form->getMessages();
foreach($form_messages as $fieldname => $field_messages)
{
$messages[$fieldname] = array_values($field_messages);
}
return new JsonModel([
'success' => false,
'data' => $messages
]);
}
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}