<?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);
}
}
}