<?php
/**
* @package XenCentral Feedback System
* @author DNF Technology
* @copyright Drnoyan & Nalyan LDA, Portugal, EU
* @license http://dnf.technology/terms/
* @link http://customers.dnf.technology
* @version 2.0.0 Beta 10
* @revision 12
*/
namespace XenCentral\Feedback\Pub\Controller;
use XF\Db\Exception;
use XF\Mvc\ParameterBag;
use XF\Pub\Controller\AbstractController;
class Comment extends AbstractController
{
use FeedbackAbstractController;
public function actionEdit(ParameterBag $params)
{
if(!\XF::visitor()->canAdminFeedback())
{
$this->_getReportSuspicious()->reportActivity('editcomment');
return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
}
$comment_id= $params->comment_id;
$comment= $this->_getCommentModel()->getCommentById($comment_id);
if (!$comment)
{
$this->_getReportSuspicious()->reportActivity('commentnotfound', array('comment_id'=>$comment_id));
return $this->error(\XF::phrase('xcfs_invalid_comment_id'));
}
$feedback=$this->_getFeedbackModel()->getFeedbackById($comment['fb_id'], false);
if(!$feedback)
{
$this->_getReportSuspicious()->reportActivity('commentfeedbackinvalid', array('fb_id'=>'$fb_id'));
return $this->error(\XF::phrase('xcfs_invalid_feedback_id'));
}
$with = [];
$user = \XF::em()->find('XF:User', $comment['user_id'], $with);
$breadCrumbs['userlink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback', $user),
'value' => \XF::phrase('xcfs_feedback_for_x', array('username'=>$user['username'])),
'node_id' => $user['user_id']
);
$breadCrumbs['feedbacklink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback/feedback/view', $feedback),
'value' => $feedback['review'],
'node_id' => $feedback['fb_id']
);
$breadCrumbs['commentlink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback/comment/edit', $comment),
'value' => \XF::phrase('xcfs_edit_comment'),
'node_id' => $comment['comment_id']
);
$viewParams=array (
'user' => $user,
'feedback'=>$feedback,
'comment'=>$comment,
'breadCrumbs'=>$breadCrumbs
);
return $this->view('XenCentral\Feedback:AddComment', 'xcfs_comment_edit', $viewParams);
}
public function actionDoEditComment(ParameterBag $params)
{
$this->assertPostOnly();
if(!\XF::visitor()->canAdminFeedback())
{
$this->_getReportSuspicious()->reportActivity('editcomment');
return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
}
$user = \XF::visitor();
$comment_id=$params->comment_id;
$commentWriter = $this->em()->find('XenCentral\Feedback:FeedbackComment', $comment_id);
$comment = $commentWriter->get('message');
$comment = $this->plugin('XF:BbCodePreview')->actionPreview($comment, 'comment', $user);
$fb_id = $commentWriter->get('fb_id');
$user_id = $commentWriter->get('user_id');
$feedback=$this->_getFeedbackModel()->getFeedbackById($commentWriter->get('fb_id'), false);
if (!isset($comment))
{
$this->_getReportSuspicious()->reportActivity('commentnotfound', array('comment_id'=>$comment_id));
return $this->error(\XF::phrase('xcfs_invalid_comment_id'));
}
$checker= $this->app()->spam()->contentChecker();
$checker->check($user, $this->filter('comment_html', 'str'));
if($checker->getFinalDecision()=='denied'){
$this->error(\XF::phrase('your_content_cannot_be_submitted_try_later'));
}
//throw new Exception($input['comment_html']);
$message = $this->plugin('XF:Editor')->fromInput('comment');;
$commentWriter = $this->em()->find('XenCentral\Feedback:FeedbackComment', $comment_id);
$commentWriter->set('fb_id', $fb_id);
$commentWriter->set('user_id',$user_id);
$commentWriter->set('message', $message);
$commentWriter->preSave();
$commentWriter->save();
return $this->redirect(
\XF::app()->router('public')->buildLink('feedback/feedback/view', $feedback),
\XF::phrase('xcfs_comment_has_been_edited')
);
}
public function actionDelete(ParameterBag $params)
{
if(!\XF::visitor()->canAdminFeedback ())
{
$this->_getReportSuspicious()->reportActivity('deletecomment');
return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
}
$comment_id=$params->comment_id;
$comment= $this->_getCommentModel()->getCommentById($comment_id);
if (!$comment)
{
$this->_getReportSuspicious()->reportActivity('commentnotfound', array('comment_id'=>$comment_id));
return $this->error(\XF::phrase('xcfs_invalid_comment_id'));
}
$feedback=$this->_getFeedbackModel()->getFeedbackById($comment['fb_id'], false);
if(!$feedback)
{
//$this->_getReportSuspicious()->reportActivity('commentfeedbackinvalid', array('fb_id'=>$fb_id));
return $this->error(\XF::phrase('xcfs_invalid_feedback_id'));
}
$with = [];
$user = \XF::em()->find('XF:User', $comment['user_id'], $with);
$breadCrumbs['userlink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback', $user),
'value' => \XF::phrase('xcfs_feedback_for_x', array('username'=>$user['username'])),
'node_id' => $user['user_id']
);
$breadCrumbs['feedbacklink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback/feedback/view', $feedback),
'value' => $feedback['review'],
'node_id' => $feedback['fb_id']
);
$breadCrumbs['commentlink'] = array(
'href' => \XF::app()->router('public')->buildLink('feedback/comment/edit', $comment),
'value' => \XF::phrase('xcfs_edit_comment'),
'node_id' => $comment['comment_id']
);
$viewParams=array (
'user' => $user,
'feedback'=>$feedback,
'comment'=>$comment,
'breadCrumbs'=>$breadCrumbs
);
return $this->view('XenCentral\Feedback:DeleteComment', 'xcfs_comment_delete', $viewParams);
}
public function actionDoDeleteComment(ParameterBag $params)
{
if(!\XF::visitor()->canAdminFeedback())
{
return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
}
$comment_id=$params->comment_id;
$comment= $this->_getCommentModel()->getCommentById($comment_id);
if (!$comment)
{
return $this->error(\XF::phrase('xcfs_invalid_comment_id'));
}
$feedback=$this->_getFeedbackModel()->getFeedbackById($comment['fb_id'], false);
if(!$feedback)
{
$this->_getReportSuspicious()->reportActivity('commentfeedbackinvalid', array('fb_id'=>$comment['fb_id']));
return $this->error(\XF::phrase('xcfs_invalid_feedback_id'));
}
/**
* @var XenCentral_Feedback_DataWriter_Comment
*/
$commentWriter = $this->em()->find('XenCentral\Feedback:FeedbackComment', [
'comment_id' => $comment_id
]);
$commentWriter->delete();
return $this->redirect(
\XF::app()->router('public')->buildLink('feedback/feedback/view', $feedback),
\XF::phrase('xcfs_comment_has_been_deleted')
);
}
public static function getSessionActivityDetailsForList(array $activities)
{
return \XF::phrase('xcfs_viewing_feedback_system');
}
}