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

File size: 5.31Kb
<?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\Mvc\ParameterBag;
use XF\Pub\Controller\AbstractController;

class Stats extends AbstractController
{
    use FeedbackAbstractController;

    public function actionIndex()
	{
		if (!\XF::visitor()->canViewFeedback())
		{
			$this->_getReportSuspicious()->reportActivity('viewstats');
			return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
		}

		$user_id = $this->filter('user_id', 'uint');
		if ($user_id)
		{
			return $this->rerouteController(__CLASS__, 'view-user');
		}

		$params = array(
			'from' => $this->_getStatsModel()->getFirstFeedbackDate(),
			'to' => \XF::$time,
			'user'=>array()
		);

		return $this->view('XenCentral\Feedback:Stats', 'xcfs_board_stats', $params);
	}

	public function actionViewUser(ParameterBag $params)
	{
		if (!\XF::visitor()->canViewFeedback())
		{
			$this->_getReportSuspicious()->reportActivity('viewstats');

			return $this->error(\XF::phrase('xcfs_cannot_view_the_page'));
		}

		$user_id = $this->filter('user_id', 'uint');

		if (!$user_id)
		{
			$user_id = \XF::visitor()->user_id;
		}

		$user = $this->assertRecordExists('XF:User', $params->user_id);

		if (!$user)
		{
			$this->_getReportSuspicious()->reportActivity('usernotfound', array(
			                                                                                                         'user_id' => $user_id
			                                                                                                    ));
			return $this->error(\XF::phrase('requested_user_not_found'));
		}

		$params = array(
			'from' => $this->_getStatsModel()->getFirstFeedbackDate(),
			'to' => \XF::$time,
			'user'=>$user,
			'pageTitle'=>\XF::phrase('xcfs_feedback_statistics_for_x', array('username'=>$user['username']))
		);

		return $this->view('XenCentral\Feedback:Stats', 'xcfs_user_stats', $params);
	}

	public function actionGenerateNewFeedbackStats()
	{
		$user_id = $this->filter('user_id', 'uint');

		$filter = $this->filter('filter', 'array');

		$this->_preLoadPhrases($filter);

		if (empty($filter))
		{
			$error = \XF::phrase('xcfs_please_select_feedback_types');
			echo json_encode(array('error' => $error->render()));
			exit();
		}

		$to = $this->filter('to', 'str');
		$from = $this->filter('from', 'str');

		$to = strtotime($to);

		$from = strtotime($from);
		if (!$to || !$from || $to <= $from)
		{
			$error = \XF::phrase('xcfs_please_select_correct_date_interval');
			echo json_encode(array('error' => $error->render()));
			exit();
		}

		$data = $this->_getStatsModel()->getNewFeedbackData($user_id, $filter, $from, $to);

		if (!$data)
		{
			$error = \XF::phrase('xcfs_no_stats_data_is_available');
			echo json_encode(array('error' => $error->render()));
			exit();
		}

		$title = '';

		$data['title'] = $title;

		echo json_encode(
			array(
			     'data' => $data
			)
		);
		exit();
	}

	public function actionGenerateFeedbackPercentageStats()
	{
		$user_id = $this->filter('user_id', 'uint');
		
		$to = $this->filter('to', 'str');
		$from = $this->filter('from', 'str');

        $dateIntval=$this->filter('dateInterval', 'str');

        $to = strtotime($to);

		$from = strtotime($from);

        switch ($dateIntval) {
            case 'week':
                $to =\XF::$time;
                $from = \XF::$time-7*24*3600;
                break;
            case 'month':
                $to = \XF::$time;
                $from = \XF::$time - 31 * 24 * 3600;
                break;
            case 'half_year':
                $to = \XF::$time;
                $from = \XF::$time - 182 * 24 * 3600;
                break;
            case 'year':
                $to = \XF::$time;
                $from = \XF::$time - 365 * 24 * 3600;
                break;
            case 'all':
                $to = \XF::$time;
                $from = $this->_getStatsModel()->getFirstFeedbackDate($user_id);
                break;
        }

		if (!$to || !$from || $to < $from)
		{
			$error = \XF::phrase('xcfs_please_select_correct_date_interval');
			echo json_encode(array('error' => $error->render()));
			exit();
		}

		$data = $this->_getStatsModel()->getFeedbackPercentageData($user_id, $from, $to);

		if (!$data)
		{
			$error = \XF::phrase('xcfs_no_stats_data_is_available');
			echo json_encode(array('error' => $error->render()));
			exit();
		}

        $data['from']=$from;
        $data['to'] = $to;

		$title = $data['from'].' - '. $data['to'];

		$data['title'] = $title;
        $data['total_phrase']=\XF::phrase('xcfs_total');

        return $this->view('XenCentral\Feedback:Stats', '', $data);
	}
	public static function getSessionActivityDetailsForList(array $activities) {
		return \XF::phrase( 'xcfs_viewing_stats' );
	}

	protected function _preLoadPhrases($filter=array())
	{
		// preLoad all phases that may be required
		$_preLoad = array(
			'xcfs_date',
			'xcfs_please_select_feedback_types',
			'xcfs_please_select_correct_date_interval',
			'xcfs_graph_data_collection_failed'
		);

		foreach ($filter AS $type)
		{
			$_preLoad[] = 'xcfs_' . $type;
		}

		foreach ($_preLoad AS $phrase)
		{
			//\XF::phrase()->getName($phrase);
		}
	}
}