AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Internal library of functions for module
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/formslib.php');
require_once('admin/dashboard_time_form.php');
/**
* Loads the saved data from report_training_data
* @param int $starttime filters entries with starttime
* @param int $endtime filters entries with endtime
* @return Array $chartsdata of records or null
*/
function report_training_load_datas($starttime = null, $endtime = null) {
global $DB;
if (empty($starttime) || is_null($starttime)) {
$conf = $DB->get_record('report_training', array());
$starttime = $conf->starttime;
}
if (empty($endtime) || is_null($endtime)) {
$endtime = time();
}
$chartsdata = $DB->get_records_sql('SELECT * FROM {report_training_data} WHERE objectdate >= ? AND objectdate <= ?',
array($starttime, $endtime));
if (! empty($chartsdata) || ! is_null($chartsdata)) {
//var_dump($chartsdata);
return $chartsdata;
} else {
return null;
}
}
/**
* Creates the Outputcontainer for dashboard.php
* @param Array $chartout array of containers
* @param Array $vtables array of html_tables
* @return String all containers for output
*/
function report_training_create_containers($chartout, $vtables) {
$vout = array();
$vout[] = report_deviceanaltics_create_wrapper_container(
'device_types',
'dashboard_chart_device_types',
$chartout[0],
$vtables[0]);
$vout[] = report_deviceanaltics_create_wrapper_container(
'device_systems',
'dashboard_chart_device_systems',
$chartout[1],
$vtables[1]);
$vout[] = report_deviceanaltics_create_wrapper_container(
'device_browser',
'dashboard_chart_device_browser',
$chartout[2],
$vtables[2]);
$vout[] = report_deviceanaltics_create_wrapper_container(
'screen_sizes',
'dashboard_chart_screen_sizes',
$chartout[3],
$vtables[3]);
$vout[] = report_deviceanaltics_create_wrapper_container(
'window_sizes',
'dashboard_chart_window_sizes',
$chartout[4],
$vtables[4]);
$vout[] = report_deviceanaltics_create_wrapper_container(
'pointing_method',
'dashboard_chart_pointing_method',
$chartout[5],
$vtables[5]);
return $vout;
}
/**
* Check if object holds screen data
* @param Object $var entryobject
* @return bool true/false
* @deprecated
*/
function report_device_analytics_is_not_null($var) {
return !is_null($var->devicedisplaysizex);
}
/**
* Calculate the number of subversion inside array
* @param Array $datarray array ob records
* @return int count of subversion
*/
function report_device_analytics_calc_numbers_of_version($datarray) {
$returnnumber = 0;
foreach ($datarray as $value) {
$returnnumber += $value;
}
return $returnnumber;
}
/**
* Calculate the percent for element inside array
* @param Array $datarray array with prechecked elements
* @param String $calckey calc elementkey
* @return float percent of searched value
*/
function report_device_analytics_calc_percent($datarray, $calckey) {
$groundvalue = 0;
$procvalue = $datarray[$calckey];
foreach ($datarray as $val) {
$groundvalue += $val;
}
return number_format((($procvalue / $groundvalue) * 100) , 2);
}
/**
* Same as report_device_analytics_calc_percent, but from subarray
* @param Array $datarray array with prechecked elements
* @param String $calckey calc elementkey
* @return float percent of searched value
*/
function report_device_analytics_calc_percent_from_sub($datarray, $calckey) {
$groundvalue = 0;
$procsub = array();
foreach ($datarray as $key => $subvalue) {
$subval = 0;
foreach ($subvalue as $value) {
$subval += $value;
}
$procsub[$key] = $subval;
$groundvalue += $subval;
}
return number_format((($procsub[$calckey] / $groundvalue) * 100) , 2);
}
/**
* Creates the wrapper container for charts and tables - also write tables
* @param String $wrappername name of the div wrapper
* @param String $headername heading line - from moodle/lang
* @param String $chartoutput holds all information for the charts
* @param html_table $vtables table object for html_writer
* @return String $oretrun output-string
*/
function report_deviceanaltics_create_wrapper_container($wrappername, $headername, $chartoutput, $vtables) {
global $OUTPUT;
$oreturn = $OUTPUT->heading(get_string($headername, 'report_training'), 4);
$oreturn .= $OUTPUT->container_start('wrapper', $wrappername);
if (! empty($chartoutput) || ! is_null($chartoutput)) {
$oreturn .= $chartoutput;
}
if (! empty($vtables) || ! is_null($vtables)) {
$oreturn .= html_writer::table($vtables);
}
$oreturn .= $OUTPUT->container_end();
return $oreturn;
}
/**
* Calculate the Tables
* @param Array $datas - preselected entries form data table
* @return String $returntables output-string
*/
function report_training_create_data_tables($datas) {
$returntables = array();
$returntables[0] = new html_table();
$returntables[0]->head = (array) get_strings(array('table_type', 'table_percent', 'table_count'), 'report_training');
$devicetypes = array();
foreach ($datas as $devicetypedata) {
$type = $devicetypedata->devicetype;
if (array_key_exists($type, $devicetypes)) {
$devicetypes[$devicetypedata->devicetype]++;
} else {
$devicetypes[$devicetypedata->devicetype] = 1;
}
}
foreach ($devicetypes as $tname => $count) {
$returntables[0]->data[] = array($tname, report_device_analytics_calc_percent($devicetypes, $tname)."%", $count);
}
$returntables[1] = new html_table();
$returntables[1]->head = (array) get_strings(array('table_os', 'table_percent', 'table_count'), 'report_training');
$deviceoses = array();
foreach ($datas as $deviceosdata) {
$type = $deviceosdata->devicesystem;
if (array_key_exists($type, $deviceoses)) {
$deviceoses[$deviceosdata->devicesystem]++;
} else {
$deviceoses[$deviceosdata->devicesystem] = 1;
}
}
foreach ($deviceoses as $tname => $count) {
$returntables[1]->data[] = array($tname, report_device_analytics_calc_percent($deviceoses, $tname)."%", $count);
}
$returntables[2] = new html_table();
$returntables[2]->head = (array) get_strings(array('table_browser', 'table_percent', 'table_count'), 'report_training');
$devicebrowser = array();
foreach ($datas as $devicebrowserdata) {
$browser = $devicebrowserdata->devicebrowser;
$browserversion = $devicebrowserdata->devicebrowserversion;
if (array_key_exists($browser, $devicebrowser)) {
if (array_key_exists($devicebrowserdata->devicebrowserversion, $devicebrowser[$devicebrowserdata->devicebrowser])) {
$devicebrowser[$devicebrowserdata->devicebrowser][$devicebrowserdata->devicebrowserversion]++;
} else {
$devicebrowser[$devicebrowserdata->devicebrowser][$devicebrowserdata->devicebrowserversion] = 1;
}
} else {
$devicebrowser[$devicebrowserdata->devicebrowser] = array();
$devicebrowser[$devicebrowserdata->devicebrowser][$devicebrowserdata->devicebrowserversion] = 1;
}
}
foreach ($devicebrowser as $bname => $sub) {
$returntables[2]->data[] = array(
'<b>'.$bname.'</b>',
report_device_analytics_calc_percent_from_sub($devicebrowser, $bname).'%',
report_device_analytics_calc_numbers_of_version($sub)
);
foreach ($sub as $vnum => $scount) {
$returntables[2]->data[] = array(
get_string('table_version', 'report_training').': '.$vnum,
report_device_analytics_calc_percent($sub, $vnum).'%',
$scount
);
}
}
$returntables[3] = new html_table(); //era null
$returntables[3] ->head = (array) get_strings(array('table_userid', 'table_name', 'table_fecha'), 'report_training'); //null;
$usuarios = array();
foreach ($datas as $userdata) {
$userid = $userdata->userid;
// if (array_key_exists($userid, $usuarios)) {
$usuarios[$userdata->userid]++;
// } else {
// $usuarios[$userdata->userid] = 1;
// }
}
foreach ($usuarios as $tname => $count) {
$returntables[3]->data[] = array($tname, report_device_analytics_calc_percent($devicetypes, $tname)."%", $count);
}
$returntables[5] = new html_table();
$returntables[5]->head = (array) get_strings(array('table_pointing', 'table_percent', 'table_count'), 'report_training');
$devicepointing = array();
foreach ($datas as $devicepointdata) {
$ptype = $devicepointdata->devicepointingmethod;
if (array_key_exists($ptype, $devicepointing)) {
$devicepointing[$devicepointdata->devicepointingmethod]++;
} else {
$devicepointing[$devicepointdata->devicepointingmethod] = 1;
}
}
foreach ($devicepointing as $tname => $count) {
$returntables[5]->data[] = array($tname, report_device_analytics_calc_percent($devicepointing, $tname)."%", $count);
}
return $returntables;
}
/**
* Create Canvas Elements for the charts output
* @return Array $returncharts array of canvas elements
*/
function report_training_create_charts() {
$returncharts = array();
$returncharts[0] = '<canvas class="rd_chart" id="chart_devicetypes"></canvas>';
$returncharts[1] = '<canvas class="rd_chart" id="chart_devicesystems"></canvas>';
$returncharts[2] = '<canvas class="rd_chart" id="chart_devicebrowsers"></canvas>';
$returncharts[3] = '<canvas class="rd_chart" id="chart_devicedisplaysize"></canvas>';
$returncharts[4] = '<canvas class="rd_chart" id="chart_devicewindowsize"></canvas>';
$returncharts[5] = null;
return $returncharts;
}
/**
* Loads the saved data from report_training_data
* @param string $userid filters entries by user name
* @return Array $conf of records or null
*/
function report_training_get_user_connections($userid = null) {
global $DB;
if ($userid !== null) {
$conf = $DB->get_records('report_training_data', ['userid' => (int) $userid], '', 'devicesystem,devicebrowser,devicetype,ip');
return $conf;
} else {
return null;
}
}
// TODO: CAMBIAR CONSULTA DEL LAST ACCES A FORM_DATA
/**
* Loads the saved data from report_training_activities
* @param string $userid filters entries by user id
* @return Array $conf of records or null
*/
function report_training_get_user_courses_activity($userid = null) {
global $DB;
if ($userid !== null) {
$user_last_access = $DB->get_records('report_training_activities', ["userid" => (int) $userid]);
foreach($user_last_access as $record) {
$course = $DB->get_record('course', ["id" => $record->courseid], 'fullname');
if ($course) {
$coursename = $course->fullname;
$coursemodules = get_fast_modinfo($record->courseid);
$module = $coursemodules->get_cm($record->cmid);
$record->timeaccess = date("d-m-Y", $record->timeaccess);
$record->coursename = $coursename;
$record->modname = $module->name;
} else {
$record->coursename = null;
}
}
return $user_last_access;
} else {
return null;
}
}
/**
* Creates tables with user connections data
* @param Array $userconnections provides data to create the table
* @return html_table $table element to display user data or null
*/
function report_training_create_user_connections_table($userconnections = null) {
if ($userconnections !== null) {
$table = new html_table();
$table->head = array(get_string('table_os', 'report_training'), get_string('table_browser', 'report_training'), get_string('dashboard_chart_device_types', 'report_training'), get_string('userdata_table_ip', 'report_training'));
foreach($userconnections as $connectioninfo) {
$table->data[] = array($connectioninfo->devicesystem, $connectioninfo->devicebrowser, $connectioninfo->devicetype, $connectioninfo->ip);
}
return $table;
} else {
return null;
}
}
/**
* Creates tables with user activity data
* @param Array $useractivityrecords provides data to create the table
* @return html_table $table element to display user data or null
*/
function report_training_create_activity_user_table($useractivityrecords = null) {
if ($useractivityrecords !== null) {
$table = new html_table();
$table->head = array(get_string('userdata_table_viewed_date', 'report_training'), get_string('userdata_table_course_name', 'report_training'), get_string('userdata_table_module_name', 'report_training'), get_string('userdata_table_module_link', 'report_training'));
foreach($useractivityrecords as $record) {
if ($record->coursename) {
$table->data[] = array($record->timeaccess, $record->coursename, $record->modname,'<a class="report-training-table-link" href='.$record->viewurl.'>'.get_string('userdata_table_module_click', 'report_training') . '</a>');
}
}
return $table;
} else {
return null;
}
}