Files
opensem/app/Repositories/Core/Stat.php
Ludovic CANDELLIER 36267139a1 [WIP] Setup of skeleton
2020-03-25 00:08:27 +01:00

188 lines
4.9 KiB
PHP

<?php
namespace App\Repositories\Core;
class Stat
{
public static $is_debug = false;
public static $force_output = true;
private static $_instance;
private function __construct()
{
}
public static function getInstance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
public static function push($range, $var)
{
$tab = (is_array($var)) ? $var : array();
foreach ($range as $item) {
$begin = date_timestamp_get($item['begin']);
$end = date_timestamp_get($item['end']);
$tab[] = ['begin' => $begin, 'end' => $end, 'count' => $item['count']];
}
return $tab;
}
/*
fonctions de rendus
*/
public static function renderStatsbyMultiVar($var, $var_option = '')
{
static::renderStatsJson(static::getStatsbyMultiVar($var, $var_option));
}
public static function renderStatsbyVar($var)
{
static::renderStatsJson(static::getStatsbyVar($var));
}
public static function renderStatsbyOptions($var, $var_option = '')
{
static::renderStatsJson(static::getStatsbyOptions($var, $var_option));
}
public static function renderStatsJson($data)
{
Response::headers()->set('Content-Type', 'application/json');
Response::setBody(json_encode($data, JSON_NUMERIC_CHECK));
}
/*
Fonctions internes
*/
public static function getStatsbyMultiVar($var, $var_option = '')
{
if (empty($var_option)) {
$var_option = $var;
}
$options = self::getInstance()->controller->getOption($var_option);
return self::getInstance()->getStatsbyMultiOptions($var, $options);
}
public static function getCountByPeriod($var, $begin, $end)
{
$count = static::getModel()
->whereBetween($var, $begin, $end)
->count();
return $count;
}
public static function getCountbyVar($var)
{
$db = self::getInstance()->app->db;
$data = static::getModel()
->select($db::raw("count(id) as y, $var as name"))
->groupBy($var)
->get();
// var_Debug::message($data);
return ($data);
}
public static function getStatsbyOptions($var, $var_option = '')
{
if (empty($var_option)) {
$var_option = $var;
}
$options = self::getInstance()->controller->getOption($var_option);
$nb = static::getCountbyOption($var);
// var_Debug::message($nb);
foreach ($options as $key => $value) {
$y = (int) $nb[$key];
$data[] = ['y' => $y, 'name' => $value];
}
// var_Debug::message($data);
return ($data);
}
public static function getCountbyOption($var)
{
$db = self::getInstance()->app->db;
$data = static::getModel()
->select($db::raw('count(id) as nb'))
->groupBy($var)
->get();
foreach ($data as $key => $value) {
if (is_array($data[$key])) {
$data[$key] = (int) $data[$key]['nb'];
} else {
$data[$key] = (int) $data[$key]->nb;
}
}
return ($data);
}
public static function getStatsbyMultiOptions($var, $options)
{
foreach ($options as $key => $value) {
$nb = static::getCountbyBin($var, $key);
$data[] = ['y' => $nb, 'name' => $value];
}
return ($data);
}
public static function getCountbyBin($var, $value)
{
$bit = pow(2, $value);
$count = static::getModel()
->where($var, '&', $bit)
->count();
return $count;
}
public static function getStatsbyPeriod($begin = '', $end = '', $period = 'days')
{
$end = Carbon::now();
$begin = Carbon::now()->subMonth(1);
switch ($period) {
case 'days':
$periods = DateRange::getPeriodsbyDay($begin, $end);
break;
case 'months':
$periods = DateRange::getPeriodsbyMonth($begin, $end);
break;
case 'weeks':
$periods = DateRange::getPeriodsbyWeek($begin, $end);
break;
default:
}
return ($periods);
}
public static function serializeValues($tab)
{
return static::serializeByVar($tab, 'count');
}
public static function serializeByVar($tab, $var, $n = 0)
{
$collection = collect($tab);
if ($n) {
$tab = $collection->pluck($var)->slice(-$n)->toArray();
} else {
$tab = $collection->pluck($var)->toArray();
}
return implode(",", $tab);
}
public static function avgByVar($tab, $var)
{
return collect($tab)->pluck($var)->avg();
}
}