View file upload/src/addons/XenCentral/Feedback/Pub/Controller/Comment.php

File size: 6.93Kb
<?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');
	}
}