Rev 1662 | Rev 6849 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(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\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 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(){$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']);}}