283 lines
7.4 KiB
PHP
283 lines
7.4 KiB
PHP
<?php
|
|
/**
|
|
* @version $Id: admin_shoptheme_editor.php
|
|
* @package Easyshop
|
|
* @copyright Copyright (C) 2005 - 2011 TA-EDV
|
|
* @license proprietary
|
|
* @author Richard Kammermayer <rkd@ta-edv.de>
|
|
* Easyshop is a web shop system
|
|
*/
|
|
|
|
include_once './core/statistic.class.php';
|
|
|
|
class admin_statistic_editor {
|
|
private $base_object;
|
|
private $layout_object;
|
|
private $statistic_object;
|
|
|
|
function __construct($base_object, $layout_object) {
|
|
$this->base_object = $base_object;
|
|
$this->layout_object = $layout_object;
|
|
$this->statistic_object = new Statistic($base_object);
|
|
} // end __construct
|
|
|
|
function run() {
|
|
if (isset($_GET['action'])) {
|
|
$action = $_GET['action'];
|
|
} elseif (isset($_POST['action'])) {
|
|
$action = $_POST['action'];
|
|
} else {
|
|
$action = false;
|
|
}
|
|
|
|
if (isset($_GET['id'])) {
|
|
$id = $_GET['id'];
|
|
} elseif (isset($_POST['id'])) {
|
|
$id = $_POST['id'];
|
|
} else {
|
|
$id = false;
|
|
}
|
|
|
|
if ($action == "get_tab") {
|
|
$this->get_tab($id);
|
|
} elseif ($action == "view_stat") {
|
|
$this->view_stat($id);
|
|
} elseif ($action == "get_csv") {
|
|
$this->get_csv($id);
|
|
} else {
|
|
return $this->setup_list($id);
|
|
}
|
|
} // end run
|
|
|
|
private function setup_list($id) {
|
|
if ($id) {
|
|
$data = $this->statistic_object->get_by_id($id);
|
|
|
|
if ($data) {
|
|
$this->layout_object->assign('form_data', $data);
|
|
} else {
|
|
$this->layout_object->assign('error_message', "Diese Statistik existiert nicht.");
|
|
}
|
|
}
|
|
// implied else, no action taken when you create something new
|
|
|
|
$tabs = array (
|
|
'year' => 'Jahr',
|
|
'month' => 'Monat',
|
|
/*'week' => 'Woche',*/
|
|
'day' => 'Tag'
|
|
);
|
|
$stat_tabs = array();
|
|
foreach ($tabs as $tab_key => $tab_value) {
|
|
$temp['name'] = $tab_value;
|
|
$temp['id'] = $tab_key;
|
|
$temp['selector'] = $tab_key;
|
|
|
|
$stat_tabs[] = $temp;
|
|
}
|
|
$this->layout_object->assign('tabs', $stat_tabs);
|
|
|
|
return $this->layout_object->fetch('admin_statistic_editor.tpl');
|
|
} // end default_action
|
|
|
|
|
|
private function get_tab($id) {
|
|
$data = array();
|
|
if ($id) {
|
|
$data = $this->statistic_object->get_by_id($id);
|
|
|
|
// get today date
|
|
$today = getdate();
|
|
$this->layout_object->assign('today', $today);
|
|
|
|
// set years
|
|
$years = array();
|
|
for ($y=0;$y<5;$y++) {
|
|
$years[] = $today['year'] - $y;
|
|
}
|
|
$this->layout_object->assign('years', $years);
|
|
|
|
|
|
|
|
$this->layout_object->assign('tab_id', $_GET['tab_id']);
|
|
|
|
if ($data) {
|
|
$this->layout_object->assign('form_data', $data);
|
|
} else {
|
|
$this->layout_object->assign('error_message', "Diese Statistik existiert nicht.");
|
|
}
|
|
}
|
|
|
|
$this->layout_object->assign('statistic_data', $data);
|
|
echo $this->layout_object->fetch('admin_statistic_filter.tpl');
|
|
exit();
|
|
}
|
|
|
|
private function view_stat($id) {
|
|
$data = array();
|
|
if ($id) {
|
|
$tab_id = $_GET['tab_id'];
|
|
$filter = array('period' => $tab_id);
|
|
if ($tab_id == 'year') {
|
|
$year = $_POST['year'];
|
|
$filter['date_start'] = $year.'-01-01';
|
|
$filter['date_end'] = $year.'-12-31';
|
|
}
|
|
else if ($tab_id == 'month') {
|
|
$year = $_POST['year'];
|
|
$month = $_POST['month'];
|
|
$filter['date_start'] = $year.'-'.$month.'-01';
|
|
$monat = mktime(0, 0, 0, $month, 1, $year);
|
|
$max_days_of_month = date("t", $monat);
|
|
$filter['date_end'] = $year.'-'.$month.'-'.$max_days_of_month;
|
|
}
|
|
else if ($tab_id == 'week') {
|
|
$filter['date_start'] = '2012-01-01';
|
|
$filter['date_end'] = '2012-12-31';
|
|
}
|
|
else if ($tab_id == 'day') {
|
|
$year = substr($_POST['date'],6,4);
|
|
$month = substr($_POST['date'],3,2);
|
|
$day = substr($_POST['date'],0,2);
|
|
$filter['date_start'] = $year.'-'.$month.'-'.$day;
|
|
$filter['date_end'] = $year.'-'.$month.'-'.$day;
|
|
}
|
|
else {
|
|
echo "No date selected!";
|
|
exit();
|
|
}
|
|
|
|
|
|
$data = $this->statistic_object->get_by_id($id);
|
|
|
|
$this->layout_object->assign('filter', $filter);
|
|
|
|
if ($data) {
|
|
$this->layout_object->assign('form_data', $data);
|
|
} else {
|
|
$this->layout_object->assign('error_message', "Diese Statistik existiert nicht.");
|
|
}
|
|
}
|
|
|
|
// get today date
|
|
$today = getdate();
|
|
$this->layout_object->assign('today', $today);
|
|
|
|
// load modules
|
|
$module_file = 'core/statistics/'.$data->modul.'.inc.php';
|
|
$stat_modul = $data->modul;
|
|
if(file_exists($module_file)) {
|
|
include_once $module_file;
|
|
$modul_object = new $stat_modul($this->base_object);
|
|
$data->statistic_data = $modul_object->run($filter);
|
|
} else {
|
|
echo "Statistic modul not found!";
|
|
exit();
|
|
}
|
|
|
|
// Generate modern Plotly charts
|
|
$plotly_chart_bar = $this->generate_plotly_chart($data->statistic_data, $filter, 'bar');
|
|
$plotly_chart_line = $this->generate_plotly_chart($data->statistic_data, $filter, 'line');
|
|
|
|
$this->layout_object->assign('plotly_chart_bar', $plotly_chart_bar);
|
|
$this->layout_object->assign('plotly_chart_line', $plotly_chart_line);
|
|
$this->layout_object->assign('statistic_data', $data);
|
|
echo $this->layout_object->fetch('admin_statistic_view.tpl');
|
|
exit();
|
|
}
|
|
|
|
private function generate_plotly_chart($statistic_data, $filter, $chart_type = 'bar') {
|
|
// Prepare data for Python chart service
|
|
$chart_config = array(
|
|
'type' => $chart_type,
|
|
'title' => ($chart_type == 'bar' ? 'Säulendiagramm' : 'Liniendiagramm'),
|
|
'period' => $filter['period']
|
|
);
|
|
|
|
$input_data = array(
|
|
'data' => $statistic_data,
|
|
'config' => $chart_config
|
|
);
|
|
|
|
$json_input = json_encode($input_data);
|
|
|
|
// Call Python chart service
|
|
$python_script = ROOT_DIR . 'modules/import/chart_service.py';
|
|
$command = "echo " . escapeshellarg($json_input) . " | python3 " . escapeshellarg($python_script) . " 2>&1";
|
|
|
|
$output = shell_exec($command);
|
|
|
|
if (empty($output)) {
|
|
return '<div style="padding: 20px; background: #fee; border: 1px solid #fcc;">Chart-Generierung fehlgeschlagen</div>';
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
private function get_csv($id) {
|
|
if ($id) {
|
|
$tab_id = $_GET['tab_id'];
|
|
$filter = array('period' => $tab_id);
|
|
$filter['date_start'] = $_GET['date_start'];
|
|
$filter['date_end'] = $_GET['date_end'];
|
|
|
|
$data = $this->statistic_object->get_by_id($id);
|
|
|
|
}
|
|
|
|
// load modules
|
|
$module_file = 'core/statistics/'.$data->modul.'.inc.php';
|
|
$stat_modul = $data->modul;
|
|
if(file_exists($module_file)) {
|
|
include_once $module_file;
|
|
$modul_object = new $stat_modul($this->base_object);
|
|
$data->statistic_data = $modul_object->run($filter);
|
|
} else {
|
|
echo "Statistic modul not found!";
|
|
exit();
|
|
}
|
|
|
|
$csv = '';
|
|
foreach ($data->statistic_data as $row) {
|
|
$csv .= implode(";",$row)."\r\n";
|
|
}
|
|
|
|
$csv = utf8_decode($csv);
|
|
|
|
echo $csv;
|
|
$application="text/csv";
|
|
header( "Content-Type: $application" );
|
|
header( "Content-Disposition: attachment; filename=statistik.csv");
|
|
header( "Content-Description: csv File" );
|
|
header( "Pragma: no-cache" );
|
|
header( "Expires: 0" );
|
|
exit();
|
|
}
|
|
|
|
// only used in ajax, so i terminate with exit
|
|
private function save() {
|
|
if (isset($_POST['form_field'])) {
|
|
$data = $_POST['form_field'];
|
|
|
|
if ($data['id'] == '') {
|
|
unset($data['id']);
|
|
}
|
|
|
|
$result = $this->statistic_object->save($data);
|
|
|
|
if ($result) {
|
|
$return = array('status' => 'success', 'id' => $result);
|
|
} else {
|
|
$return = array('status' => 'error', 'message' => 'save failed');
|
|
}
|
|
} else {
|
|
$return = array('status' => 'error', 'message' => 'no forms data');
|
|
}
|
|
|
|
echo json_encode($return);
|
|
|
|
exit();
|
|
} // end save
|
|
|
|
} // end
|