| Server IP : 165.22.154.248 / Your IP : 216.73.217.0 [ Web Server : Apache/2.4.29 (Ubuntu) System : Linux droplet-integra 4.15.0-197-generic #208-Ubuntu SMP Tue Nov 1 17:23:37 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 7.2.24-0ubuntu0.18.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/avanza-lms.old.bak9874115/blocks/ranking_didactic/ |
Upload File : |
<?php
// Este codigo le pertenece a Escuela Didactica <https://escueladidactica.com>
//
// Construimos procesos de transformación para empresas donde sus
// colaboradores se capaciten con el conocimiento de su empresa
// mediante experiencias educativas digitales.
//
/**
*
* @package block_ranking_didactic
* @copyright 2019 Jose Gomez <info@escueladidactica.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
//Funcion que consulta notas y pone puntos para el ranking, ademas de entregar un objeto JSON ordenado con todos los datos
function get_ranking_users($courseid, $limit=13){
global $DB, $CFG;
$sql="SELECT DISTINCT u.id,u.username,
u.firstname as nombre,
u.lastname as apellidos,
u.email as correo,
COALESCE( (SELECT sum(round((gr.finalgrade*7)) )
FROM mdl_grade_items i
JOIN mdl_grade_grades gr ON (i.id =gr.itemid)
WHERE i.courseid=c.id
AND (i.itemmodule='quiz'
OR i.itemmodule='workshop'
OR i.itemmodule='lesson'
OR i.itemmodule='data'
OR i.itemtype='manual'
OR i.itemtype='assign'
OR i.itemtype='scorm'
OR i.itemtype='hvp')
AND gr.userid=u.id
),0) as puntos,
COALESCE(
(SELECT AVG(MINUTE(time(FROM_UNIXTIME(qa.timefinish) - FROM_UNIXTIME(qa.timestart)))) promedio_tiempo_quiz
FROM mdl_quiz quiz, mdl_quiz_attempts qa, mdl_course mc, mdl_user us, mdl_quiz_grades grade
WHERE qa.quiz = grade.quiz
AND qa.userid = grade.userid
AND qa.quiz = quiz.id
AND qa.userid = us.id
AND us.id = grade.userid
AND quiz.course=mc.id
AND mc.id = {$courseid}
AND us.id= u.id
),9999999) as tiempo_empleado
FROM mdl_user u
JOIN mdl_role_assignments s on(u.id= s.userid)
JOIN mdl_role r on(r.id=s.roleid)
JOIN mdl_context ct on (ct.id=s.contextid AND ct.contextlevel=50)
JOIN mdl_course c ON(c.id=ct.instanceid)
WHERE c.id= {$courseid}
AND r.id=5
ORDER BY puntos DESC, tiempo_empleado
LIMIT ".$limit;
$sql = str_replace('mdl_', $CFG->prefix, $sql);
$users_ranking = $DB->get_records_sql($sql);
$JSON_data = "";
if($users_ranking){
$indice = 1;
foreach ($users_ranking as $key => $usuario) {
$users_ranking[$key]->getImagenPerfil = get_imagen_perfil($usuario->id,'f1');
$users_ranking[$key]->puntos = round($usuario->puntos,0);
$users_ranking[$key]->wwwroot = $CFG->wwwroot;
$users_ranking[$key]->courseid = $courseid;
$users_ranking[$key]->indice = $indice;
$indice++;
}
$JSON_data = json_encode($users_ranking);
}
else{
$JSON_data = "{data:'no hay datos de usuarios'}";
}
return $JSON_data;
}
//Funcion que devuelve la imagen del perfil de un usuario
function get_imagen_perfil($userid,$size='f1'){
global $DB, $CFG;
$imagen=$CFG->wwwroot."/theme/image.php?theme=".$CFG->theme."&component=core&image=u%2F".$size;
$sql1 = "SELECT c.id as contextid,u.picture
FROM mdl_user u
JOIN mdl_context c ON (c.instanceid=u.id and c.contextlevel=30)
WHERE u.id = ".$userid;
$sql1 = str_replace('mdl_', $CFG->prefix, $sql1);
$result= $DB->get_records_sql($sql1);
if(!empty($result)){
foreach($result as $res){
if( $res->picture <> 0){
$imagen = $CFG->wwwroot."/pluginfile.php/".$res->contextid."/user/icon/".$size;
}
}
}
return $imagen;
}
//Ordena los datos para los ciclos que corren dentro del template mustache
function order_data_for_template($data){
$data = json_decode($data);
$array_datos = array();
$contador = 1;
if(isset($data)){
foreach ($data as $key => $value) {
if($contador <= 3){
$objeto = array("winner" => $value);
}
else{
$objeto = array("loser" => $value);
}
array_push($array_datos, $objeto);
$contador++;
}
}
return $array_datos;
}