Rev 6521 | Rev 6749 | 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\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\MyCoachCategoryMapper;use LeadersLinked\Form\MyCoach\MyCoachQuestionForm;use LeadersLinked\Library\MyCoachAccessControl;use LeadersLinked\Form\MyCoach\MyCoachAnswerForm;use LeadersLinked\Mapper\MyCoachQuestionMapper;use LeadersLinked\Mapper\MyCoachQuestionCategoryMapper;use LeadersLinked\Model\MyCoachQuestionCategory;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Model\MyCoachQuestion;use Laminas\Db\ResultSet\HydratingResultSet;use Laminas\Paginator\Adapter\DbSelect;use Laminas\Paginator\Paginator;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\MyCoachAnswerMapper;use LeadersLinked\Mapper\CommentMapper;use LeadersLinked\Model\MyCoachAnswer;use LeadersLinked\Form\MyCoach\CommentForm;use LeadersLinked\Model\Comment;use LeadersLinked\Mapper\ContentReactionMapper;use LeadersLinked\Model\ContentReaction;use LeadersLinked\Mapper\MyCoachQuestionViewMapper;use LeadersLinked\Model\MyCoachQuestionView;use Laminas\Db\Sql\Expression;class MyCoachController 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;}/**** Generación del listado de perfiles* {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function indexAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$request = $this->getRequest();if ($request->isGet()) {$myCoachAccesControl = MyCoachAccessControl::getInstance($this->adapter);$categories = $myCoachAccesControl->getCategoriesWithAccessToFormSelect($currentUser->id, $currentNetwork->id);$formQuestion = new MyCoachQuestionForm($categories);$formAnswer = new MyCoachAnswerForm();$this->layout()->setTemplate('layout/layout');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/my-coach/index');$viewModel->setVariables(['categories' => $categories,'formQuestion' => $formQuestion,'formAnswer' => $formAnswer,]);return $viewModel;} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function questionsAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$request = $this->getRequest();if ($request->isGet()) {$userMapper = UserMapper::getInstance($this->adapter);$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);$category_filter_id = filter_var($this->params()->fromQuery('category_id'), FILTER_SANITIZE_STRING);$search = filter_var($this->params()->fromQuery('search'), FILTER_SANITIZE_STRING);$page = intval($this->params()->fromQuery('start', 1), 10);$order_field = 'added_on';$order_direction = 'asc';$records_x_page = 12;if ($category_filter_id) {$message_error = '';if(!$myCoachAccessControl->hasAccessForCategory($currentUser->id, $category_filter_id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => true,'data' => $message_error,]);}$categoryFilter = $myCoachCategoryMapper->fetchOneByUuid($category_filter_id);$category_ids = [$categoryFilter->id];} else {$category_ids = $myCoachAccessControl->getCategoryIdsWithAccess($currentUser->id, $currentNetwork->id);}$category_ids_with_edition = $myCoachAccessControl->getCategoryIdsWithEdition($currentUser->id);$queryMapper = QueryMapper::getInstance($this->adapter);$prototype = new MyCoachQuestion();$selectIn = $queryMapper->getSql()->select(MyCoachQuestionCategoryMapper::_TABLE);$selectIn->columns(['question_id' => new Expression('DISTINCT(id)')]);$selectIn->where->in('category_id', $category_ids);$select = $queryMapper->getSql()->select(MyCoachQuestionMapper::_TABLE);$select->where->in('id', $selectIn);if($search) {$select->where->nest()-> like('title', '%' . $search . '%')->or->like('description', '%' . $search . '%')->unnest();}$select->order($order_field . ' ' . $order_direction);//echo $select->getSqlString($this->adapter->platform);//exit;$users = [];$categories = [];//echo $select->getSqlString($this->adapter->platform); exit;$hydrator = new ObjectPropertyHydrator();$resultset = new HydratingResultSet($hydrator, $prototype);$adapter = new DbSelect($select, $queryMapper->getSql(), $resultset);$paginator = new Paginator($adapter);$paginator->setItemCountPerPage($records_x_page);$paginator->setCurrentPageNumber($page);$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$commentMapper = CommentMapper::getInstance($this->adapter);$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);$items = [];$records = $paginator->getCurrentItems();foreach ($records as $record){$bags_categories = [];$questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($record->id);$allowEdit = $myCoachAccessControl->hasAccessEditQuestion($currentUser->id, $record->id, $currentNetwork->id, $message_error);$allowDelete = $myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $record->id, $currentNetwork->id, $message_error);foreach($questionCategories as $questionCategory){if(in_array($questionCategory->category_id, $category_ids_with_edition)) {$allowDelete = true;}if (!isset($categories[$questionCategory->category_id])) {$category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);if ($category) {$categories[$category->id] = $category->name;}}array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ] ]);}if(isset($users[$record->user_id])) {$user = $users[ $record->user_id ];} else {$user = $userMapper->fetchOne($record->user_id);$users[ $record->user_id ] = $user;}$description = strip_tags($record->description);if (strlen($description) > 250) {$description = substr($description, 0, 250) . '...';}$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);$added_on = $dt->format('d/m/Y H:i a');$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);$updated_on = $dt->format('d/m/Y H:i a');$item = ['uuid' => $record->uuid,'user_name' => trim($user->first_name . ' ' . $user->last_name),'user_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'title' => $record->title,'description' => $description,'categories' => $bags_categories,'views' => intval($myCoachQuestionViewMapper->fetchCountByQuestionId($record->id), 10),'answers' => intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($record->id), 10),'reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($record->id), 10),'comments' => intval($commentMapper->fetchCountByMyCoachQuestionId($record->id), 10),'added_on' => $added_on,'updated_on' => $updated_on,'link_add_comment' => $this->url()->fromRoute('my-coach/questions/comments/add', ['id' => $record->uuid]),'link_view' => $this->url()->fromRoute('my-coach/questions/view', ['id' => $record->uuid]),'link_edit' => $allowEdit ? $this->url()->fromRoute('my-coach/questions/edit', ['id' => $record->uuid]) : '','link_delete' => $allowDelete ? $this->url()->fromRoute('my-coach/questions/delete', ['id' => $record->uuid]) : '',];array_push($items, $item);}return new JsonModel(['success' => true,'data' => ['items' => $items,'total' => $paginator->getTotalItemCount(),'page' => $paginator->getCurrentPageNumber(),'total_pages' => $paginator->getPageRange()]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function addQuestionAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);$categories = $myCoachAccessControl->getCategoriesWithAccessToFormSelect($currentUser->id, $currentNetwork->id);$form = new MyCoachQuestionForm($categories);$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();$myCoachQuestion = new MyCoachQuestion();$myCoachQuestion->network_id = $currentNetwork ->id;$myCoachQuestion->user_id = $currentUser->id;$myCoachQuestion->title = $dataPost['title'];$myCoachQuestion->description = $dataPost['description'];$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);if ($myCoachQuestionMapper->insert($myCoachQuestion)) {$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$category_ids = $dataPost['category_id'];foreach($category_ids as $category_id){$myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);if($myCoachCategory) {$myCoachQuestionCategory = new MyCoachQuestionCategory();$myCoachQuestionCategory->category_id = $myCoachCategory->id;$myCoachQuestionCategory->question_id = $myCoachQuestion->id;$myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);}}$this->logger->info('Se agrego la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_ADDED'];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];}return new JsonModel($data);} 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]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function deleteQuestionAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if ($request->isPost()) {$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswerMapper->deleteAllByQuestionId($myCoachQuestion->id);$result = $myCoachQuestionMapper->delete($myCoachQuestion);if ($result) {$data = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function editQuestionAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessEditQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if ($request->isGet()) {$category_ids = [];$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($records as $record){$myCoachCategory = $myCoachCategoryMapper->fetchOne($record->category_id);if($myCoachCategory) {array_push($category_ids,$myCoachCategory->uuid);}}$data = ['success' => true,'data' => ['category_id' => $category_ids,'title' => $myCoachQuestion->title,'description' => $myCoachQuestion->description,]];return new JsonModel($data);} else if ($request->isPost()) {$categories = $myCoachAccessControl->getCategoriesWithAccessToFormSelect($myCoachQuestion->user_id, $currentNetwork->id);$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());$form = new MyCoachQuestionForm($categories);$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();$myCoachQuestion->title = $dataPost['title'];$myCoachQuestion->description = $dataPost['description'];if ($myCoachQuestionMapper->update($myCoachQuestion)) {$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);$category_ids = $dataPost['category_id'];foreach($category_ids as $category_id){$myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);if($myCoachCategory) {$myCoachQuestionCategory = new MyCoachQuestionCategory();$myCoachQuestionCategory->category_id = $myCoachCategory->id;$myCoachQuestionCategory->question_id = $myCoachQuestion->id;$myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);}}$this->logger->info('Se edito la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];}return new JsonModel($data);} 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]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function viewQuestionAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$commentMapper = CommentMapper::getInstance($this->adapter);$myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$request = $this->getRequest();if ($request->isGet()) {$categories = [];$users = [];$bags_categories = [];$myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);$myCoachQuestionView = $myCoachQuestionViewMapper->fetchOneByQuestionIdAndUserId($myCoachQuestion->id, $currentUser->id);if(!$myCoachQuestionView) {$myCoachQuestionView = new MyCoachQuestionView();$myCoachQuestionView->question_id = $myCoachQuestion->id;$myCoachQuestionView->user_id = $currentUser->id;$myCoachQuestionViewMapper->insert($myCoachQuestionView);}$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($questionCategories as $questionCategory){if (!isset($categories[$questionCategory->category_id])) {$category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);if ($category) {$categories[$category->id] = $category->name;}}array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ] ]);}$users = [];$userMapper = UserMapper::getInstance($this->adapter);if(isset($users[$myCoachQuestion->user_id])) {$user = $users[$myCoachQuestion->user_id];} else {$user = $userMapper->fetchOne( $myCoachQuestion->user_id );$users[ $myCoachQuestion->user_id ] = $user;}$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachQuestion->added_on);$added_on = $dt->format('d/m/Y H:i a');$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachQuestion->updated_on);$updated_on = $dt->format('d/m/Y H:i a');$allowDelete = $myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $myCoachQuestion->id, $currentNetwork->id, $message_error);if($allowDelete) {$link_delete = $this->url()->fromRoute('my-coach/questions/delete', ['id' => $myCoachQuestion->uuid]);} else {$link_delete = '';}$allowAnswerAdd = $myCoachAccessControl->hasAccessAnswerQuestion($currentUser->id, $myCoachQuestion->id, $currentNetwork->id, $message_error);if ($allowAnswerAdd) {$link_answers_add = $this->url()->fromRoute('my-coach/questions/answers/add', ['id' => $myCoachQuestion->uuid]);} else {$link_answers_add = '';}$myCoachLastAnswer = $myCoachAnswerMapper->fetchOneLastAnswerByQuestionId($myCoachQuestion->id);if( $myCoachLastAnswer) {$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachLastAnswer->added_on);$last_answer_on = $dt->format('d/m/Y H:i a');} else {$last_answer_on = '';}return new JsonModel(['success' => true,'data' => ['uuid' => $myCoachQuestion->uuid,'user_name' => trim($user->first_name . ' ' . $user->last_name),'user_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'title' => $myCoachQuestion->title,'description' => $myCoachQuestion->description,'categories' => $bags_categories,'views' => intval($myCoachQuestionViewMapper->fetchCountByQuestionId($myCoachQuestion->id) , 10),'answers' => intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id) , 10),'reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id), 10),'comments' => intval($commentMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id), 10),'added_on' => $added_on,'updated_on' => $updated_on,'last_answer_on' => $last_answer_on,'link_answers' => $this->url()->fromRoute('my-coach/questions/answers', ['id' => $myCoachQuestion->uuid]),'link_answers_add' => $link_answers_add,'link_delete' => $link_delete,]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/**** {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function answersAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);$request = $this->getRequest();if ($request->isGet()) {$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$now = $myCoachAnswerMapper->getDatebaseNow();$records = $myCoachAnswerMapper->fetchAllByQuestionId($myCoachQuestion->id);$items = [];foreach($records as $record){$items[] = $this->renderAnswer($record->id, $currentUser->id, $now);}return new JsonModel(['success' => true,'data' => ['items' => $items]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function deleteAnswerAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$answer = $this->params()->fromRoute('answer');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessEditOrDeleteAnswer($currentUser->id, $answer, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($answer);if ($request->isPost()) {if($myCoachAnswerMapper->delete($myCoachAnswer)) {$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$commentMapper = CommentMapper::getInstance($this->adapter);$this->logger->info('Se borro la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => ['total_comments' => intval($commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),'total_answers' => intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),'total_reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10)]];} else {$data = ['success' => false,'data' => $myCoachAnswerMapper->getError()];}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($data);}public function editAnswerAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$answer = $this->params()->fromRoute('answer');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessEditOrDeleteAnswer($currentUser->id, $answer, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($answer);if ($request->isPost()) {$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());$form = new MyCoachAnswerForm();$form->setData($dataPost);if ($form->isValid()) {$myCoachAnswer->text = $dataPost['description'];if($myCoachAnswerMapper->update($myCoachAnswer)) {$this->logger->info('Se edito la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => ['description' => $myCoachAnswer->text]];} else {$data = ['success' => false,'data' => $myCoachAnswerMapper->getError()];}return new JsonModel($data);} 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]);}} else if ($request->isGet()) {return new JsonModel(['success' => true,'data' => ['description' => $myCoachAnswer->text]]);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}public function addAnswerAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessAnswerQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if ($request->isPost()) {$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());$form = new MyCoachAnswerForm();$form->setData($dataPost);if ($form->isValid()) {$myCoachAnswer = new MyCoachAnswer();$myCoachAnswer->question_id = $myCoachQuestion->id;$myCoachAnswer->text = $dataPost['description'];$myCoachAnswer->user_id = $currentUser->id;$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);if($myCoachAnswerMapper->insert($myCoachAnswer)) {$now = $myCoachAnswerMapper->getDatebaseNow();$this->logger->info('Se agrego la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => ['answers' => $myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id),'item' => $this->renderAnswer($myCoachAnswer->id, $currentUser->id, $now)]];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];}return new JsonModel($data);} 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]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}/*public function deleteAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if (!$myCoachQuestion) {return new JsonModel(['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND']);}$ok = false;if(!$myCoachQuestion->answers) {if($currentUser->id == $myCoachQuestion->user_id) {$ok = true;} else {$category_ids_with_edition = [];$myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);$records = $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){array_push($category_ids_with_edition, $record->user_id);}$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($records as $record){if (in_array($record->category_id, $category_ids_with_edition) && $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_EDITOR || $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR) {$ok = true;break;}}}}if (!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION']);}if ($request->isPost()) {$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);$result = $myCoachQuestionMapper->delete($myCoachQuestion);if ($result) {$data = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function editAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if (!$myCoachQuestion) {return new JsonModel(['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND']);}$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$ok = false;if(!$myCoachQuestion->answers) {if($currentUser->id == $myCoachQuestion->user_id) {$ok = true;} else {$category_ids_with_edition = [];$myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);$records = $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){array_push($category_ids_with_edition, $record->user_id);}$records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($records as $record){if (in_array($record->category_id, $category_ids_with_edition) && $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_EDITOR || $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR) {$ok = true;break;}}}}if (!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION']);}if (!$ok) {return new JsonModel(['success' => false,'data' => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION']);}if ($request->isGet()) {$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$category_ids = [];$records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($records as $record){$myCoachCategory = $myCoachCategoryMapper->fetchOne($record->category_id);if($myCoachCategory) {array_push($category_ids,$myCoachCategory->uuid);}}$data = ['success' => true,'data' => ['category_id' => $category_ids,'title' => $myCoachQuestion->title,'description' => $myCoachQuestion->description,]];return new JsonModel($data);} else if ($request->isPost()) {$category_with_edition_ids = [];$category_ids = [];$categories = [];$myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);$records = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);foreach ($records as $record) {if ($record->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR || $record->role == MyCoachCategoryUser::ROLE_USER) {array_push($category_with_edition_ids, $record->category_id);}array_push($category_ids, $record->category_id);}$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);if ($category_ids) {$records = $myCoachCategoryMapper->fetchAllByIds($category_ids);foreach ($records as $record) {if ($record->status == MyCoachCategory::STATUS_ACTIVE) {$categories[$record->id] = ['uuid' => $record->uuid,'name' => $record->name,];}}}$categories = array_values($categories);usort($categories, function ($a, $b) {return $a['name'] <=> $b['name'];});$categories_question_available = [];foreach($categories as $cartegory){$categories_question_available[ $cartegory['uuid'] ] = $cartegory['name'];}$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());$form = new MyCoachQuestionForm($categories_question_available);$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();$myCoachQuestion->title = $dataPost['title'];$myCoachQuestion->description = $dataPost['description'];if ($myCoachQuestionMapper->update($myCoachQuestion)) {$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);$category_ids = $dataPost['category_id'];foreach($category_ids as $category_id){$myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);if($myCoachCategory) {$myCoachQuestionCategory = new MyCoachQuestionCategory();$myCoachQuestionCategory->category_id = $myCoachCategory->id;$myCoachQuestionCategory->question_id = $myCoachQuestion->id;$myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);}}$this->logger->info('Se edito la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$data = ['success' => false,'data' => $myCoachQuestionMapper->getError()];}return new JsonModel($data);} 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]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function viewAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);if (!$myCoachQuestion) {return new JsonModel(['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND']);}$request = $this->getRequest();if ($request->isGet()) {$category_with_edition_ids = [];$category_ids = [];$categories = [];$myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);$records = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);foreach ($records as $record) {if ($record->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR || $record->role == MyCoachCategoryUser::ROLE_USER) {array_push($category_with_edition_ids, $record->category_id);}array_push($category_ids, $record->category_id);}$myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);if ($category_ids) {$records = $myCoachCategoryMapper->fetchAllByIds($category_ids);foreach ($records as $record) {$categories[$record->id] = ['uuid' => $record->uuid,'name' => $record->name,];}}$records = $myCoachCategoryMapper->fetchAllPublicByNetworkId($currentNetwork->id);foreach ($records as $record) {if (!isset($categories[$record->id])) {$categories[$record->id] = ['uuid' => $record->uuid,'name' => $record->name,];}}$categories = array_values($categories);usort($categories, function ($a, $b) {return $a['name'] <=> $b['name'];});$access = $myCoachQuestion->user_id == $currentUser->id;$allowDelete = false;$allowAnswer = false;$bags_categories = [];$myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);$questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($questionCategories as $questionCategory){if(in_array($questionCategory->category_id, $categories)) {$access = true;}if(in_array($questionCategory->category_id, $category_with_edition_ids)) {$allowDelete = true;$allowAnswer = true;}if (!isset($categories[$questionCategory->category_id])) {$category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);if ($category) {$categories[$category->id] = ['uuid' => $category->uuid,'name' => $category->name,];}}array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ]['name'] ]);}$users = [];$userMapper = UserMapper::getInstance($this->adapter);if(isset($users[$myCoachQuestion->user_id])) {$user = $users[$myCoachQuestion->user_id];} else {$user = $userMapper->fetchOne( $myCoachQuestion->user_id );$users[ $myCoachQuestion->user_id ] = $user;}$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);$added_on = $dt->format('d/m/Y H:i a');$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);$updated_on = $dt->format('d/m/Y H:i a');$data = ['user_name' => trim($user->first_name . ' ' . $user->last_name),'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'title' => $myCoachQuestion->title,'description' => $myCoachQuestion->description,'categories' => $bags_categories,'views' => $myCoachQuestion->views,'answers' => $myCoachQuestion->answers,'reactions' => $myCoachQuestion->reactions,'added_on' => $added_on,'updated_on' => $updated_on,'answers' => [],];if($allowDelete || $myCoachQuestion->zuser_id == $currentUser->id) {$data['link_delete'] = $this->url()->fromRoute('my-coach/questions/delete', ['id' => $myCoachQuestion->uuid]);} else {$data['ink_delete'] = '';}if ($allowAnswer) {$data['link_answers'] = $this->url()->fromRoute('my-coach/questions/answers', ['id' => $myCoachQuestion->uuid]);} else {$data['link_answers'] = '';}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$records = $myCoachAnswerMapper->fetchAllByQuestionId($myCoachQuestion->id);foreach($records as $record){$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);$added_on = $dt->format('d/m/Y H:i a');$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);$updated_on = $dt->format('d/m/Y H:i a');if(isset($users[$record->user_id])) {$user = $users[$record->user_id];} else {$user = $userMapper->fetchOne( $record->user_id );$users[ $record->user_id ] = $user;}array_push($data['answers'], ['user_name' => trim($user->first_name . ' ' . $user->last_name),'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'text' => $record->text,'added_on' => $added_on,'updated_on' => $updated_on,'link_delete' => $allowAnswer ? $this->url()->fromRoute('my-coach/questions/answer/delete', ['code' => $myCoachQuestion->uuid, 'answer' => $record->uuid]) : '',]);}return new JsonModel(['success' => true,'data' => $data]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}return new JsonModel($data);}*/public function addCommentAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$request = $this->getRequest();if ($request->isPost()) {$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);$dataPost = $request->getPost()->toArray();$form = new CommentForm();$form->setData($dataPost);if ($form->isValid()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$dataPost = (array) $form->getData();$comment = new Comment();$comment->network_id = $currentUser->network_id;$comment->comment = $dataPost['comment'];$comment->user_id = $currentUser->id;$comment->my_coach_answer_id = $myCoachAnswer->id;$comment->relational = Comment::RELATIONAL_MY_COACH;$commentMapper = CommentMapper::getInstance($this->adapter);if ($commentMapper->insert($comment)) {$now = $commentMapper->getDatebaseNow();$response = ['success' => true,'data' => ['item' => $this->renderComment($comment->id, $now),'total_comments_answer' => intval( $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10),'total_comments_question' => intval( $commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),]];return new JsonModel($response);} else {$response = ['success' => false,'data' => $commentMapper->getError()];return new JsonModel($response);}} else {$message = '';;$form_messages = (array) $form->getMessages();foreach ($form_messages as $fieldname => $field_messages) {foreach ($field_messages as $key => $value) {$message = $value;}}$response = ['success' => false,'data' => $message];return new JsonModel($response);}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($response);}}public function deleteCommentAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$comment = $this->params()->fromRoute('comment');$request = $this->getRequest();if ($request->isPost()) {$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);$commentMapper = CommentMapper::getInstance($this->adapter);$comment = $commentMapper->fetchOneByUuid($comment);if ($comment && $comment->my_coach_answer_id == $myCoachAnswer->id && $comment->user_id == $currentUser->id) {$comment->status = Comment::STATUS_DELETED;if ($commentMapper->update($comment)) {$response = ['success' => true,'data' => ['message' => 'LABEL_COMMENT_WAS_DELETED','total_comments_answer' => intval( $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10),'total_comments_question' => intval( $commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),]];} else {$response = ['success' => false,'data' => $commentMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_COMMENT_NOT_FOUND'];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function reactionsAction(){return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function saveReactionAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$reaction = $this->params()->fromPost('reaction');$request = $this->getRequest();if ($request->isPost()) {$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $currentUser->id);if ($contentReaction) {$contentReaction->reaction = $reaction;$result = $contentReactionMapper->update($contentReaction);} else {$contentReaction = new ContentReaction();$contentReaction->user_id = $currentUser->id;$contentReaction->my_coach_answer_id = $myCoachAnswer->id;$contentReaction->relational = ContentReaction::RELATIONAL_MY_COACH;$contentReaction->reaction = $reaction;$result = $contentReactionMapper->insert($contentReaction);}if ($result) {$total_reactions_question = intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10);$total_reactions_answer = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);$response = ['success' => true,'data' => ['reaction' => $reaction,'total_reactions_question' => $total_reactions_question,'total_reactions_answer' => $total_reactions_answer]];} else {$response = ['success' => false,'data' => $contentReactionMapper->getError()];}return new JsonModel($response);}$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($response);}public function deleteReactionAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();$id = $this->params()->fromRoute('id');$request = $this->getRequest();if ($request->isPost()) {$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $currentUser->id);if ($contentReaction) {if ($contentReactionMapper->deleteByByMyCoachAnswerId($myCoachAnswer->id, $currentUser->id)) {$total_reactions_question = intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10);$total_reactions_answer = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);$response = ['success' => true,'data' => ['total_reactions_question' => $total_reactions_question,'total_reactions_answer' => $total_reactions_answer]];} else {$response = ['success' => false,'data' => $contentReactionMapper->getError()];}} else {$total_reactions_question = $contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id);$total_reactions_answer = $contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id);$response = ['success' => true,'data' => ['total_reactions_question' => $total_reactions_question,'total_reactions_answer' => $total_reactions_answer]];}return new JsonModel($response);}$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($response);}public function commentsAction(){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$id = $this->params()->fromRoute('id');$request = $this->getRequest();if ($request->isGet()) {$message_error = '';$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {return new JsonModel(['success' => false,'data' => $message_error]);}$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);$now = $myCoachAnswerMapper->getDatebaseNow();$commentMapper = CommentMapper::getInstance($this->adapter);$records = $commentMapper->fetchAllPublishedByMyCoachAnswerId($myCoachAnswer->id);$comments = [];foreach ($records as $record) {$comment = $this->renderComment($record->id, $now);array_push($comments, $comment);}$response = ['success' => true,'data' => $comments];return new JsonModel($response);} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($response);}}private function renderAnswer($answer_id, $current_user_id, $now){$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$currentNetwork = $currentNetworkPlugin->getNetwork();$message_error = '';$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOne($answer_id);$myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);$myCoachQuestion = $myCoachQuestionMapper->fetchOne($myCoachAnswer->question_id);$myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);$hasAccessEditOrDeleteAnswer = $myCoachAccessControl->hasAccessEditOrDeleteAnswer($current_user_id, $answer_id, $currentNetwork->id, $message_error);if($hasAccessEditOrDeleteAnswer) {$link_edit = $this->url()->fromRoute('my-coach/questions/answers/edit',['id' => $myCoachQuestion->uuid, 'answer' => $myCoachAnswer->uuid]);$link_delete = $this->url()->fromRoute('my-coach/questions/answers/delete',['id' => $myCoachQuestion->uuid, 'answer' => $myCoachAnswer->uuid]);} else {$link_edit = '';$link_delete = '';}$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOne($myCoachAnswer->user_id);$contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);$contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $current_user_id);$total_reactions = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);$comments = [];$commentMapper = CommentMapper::getInstance($this->adapter);$total_comments = $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id);$records = $commentMapper->fetchAllPublishedByMyCoachAnswerId($myCoachAnswer->id);foreach($records as $record){$comments[] = $this->renderComment($record->id, $now);}$item = ['unique' => uniqid(),'uuid' => $myCoachAnswer->uuid,'question_uuid' => $myCoachQuestion->uuid,'user_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'user_url' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),'user_name' => $user->first_name . ' ' . $user->last_name,'time_elapsed' => Functions::timeAgo($myCoachAnswer->added_on, $now),'text' => $myCoachAnswer->text,'reaction' => $contentReaction ? $contentReaction->reaction : '','total_comments' => $total_comments,'total_reactions' => $total_reactions,'comments' => $comments,'link_edit' => $link_edit,'link_delete' => $link_delete,'link_reaction_delete' => $this->url()->fromRoute('my-coach/questions/reaction/delete', ['id' => $myCoachAnswer->uuid]),'link_save_reaction' => $this->url()->fromRoute('my-coach/questions/reaction/save', ['id' => $myCoachAnswer->uuid]),'link_add_comment' => $this->url()->fromRoute('my-coach/questions/comments/add', ['id' => $myCoachAnswer->uuid]),];return $item;}private function renderComment($comment_id, $now){$item = [];$commentMapper = CommentMapper::getInstance($this->adapter);$record = $commentMapper->fetchOne($comment_id);$myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);$myCoachAnswer = $myCoachAnswerMapper->fetchOne($record->my_coach_answer_id);if ($record) {$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOne($record->user_id);$item['unique'] = uniqid();$item['answer_uuid'] = $myCoachAnswer->uuid;$item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]);$item['user_url'] = $this->url()->fromRoute('profile/view', ['id' => $user->uuid]);$item['user_name'] = $user->first_name . ' ' . $user->last_name;$item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);$item['comment'] = $record->comment;$item['link_delete'] = $this->url()->fromRoute('my-coach/questions/comments/delete', ['id' => $myCoachAnswer->uuid, 'comment' => $record->uuid]);}return $item;}}