From 1d0ff6c16a04003a6d4488e27e94dfdb5af482da Mon Sep 17 00:00:00 2001 From: Marco De Donno Date: Sat, 4 Aug 2018 19:50:49 +0200 Subject: [PATCH] Add the statistics on the tutor home page --- backend/TE/AppDB.php | 43 ++++++++++++++++++++++++++ js/backend.admin.js | 72 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) diff --git a/backend/TE/AppDB.php b/backend/TE/AppDB.php index c40b742..6d22840 100644 --- a/backend/TE/AppDB.php +++ b/backend/TE/AppDB.php @@ -1747,6 +1747,49 @@ class AppDB_TE extends AppDB return $res; } // User views + public function getCasesDone() + { + $sql = "SELECT exid, count( exid ) AS count, name, array_agg( status ) AS status, array_agg( value ) AS value + FROM ( + SELECT assignment.id AS aid, exercise.id AS exid, exercise.name, getAssignmentStatus( assignment.id ) AS status, value + FROM assignment + JOIN exercise ON assignment.exercise = exercise.id + LEFT JOIN ( select * FROM observation where type = 3 and restype = 3 ) AS tmp ON tmp.assignment = assignment.id + WHERE value IS NOT NULL + ) AS b + GROUP BY exid, name + ORDER BY count desc, name asc"; + + $res = $this->query( $sql ); + + foreach( $res as &$row ) + { + $a = explode( ',', str_replace( [ '{', '}' ], '', $row[ 'value' ] ) ); + $b = explode( ',', str_replace( [ '{', '}' ], '', $row[ 'status' ] ) ); + + $stat = array( 1=>0, 2=>0, 3=>0, 4=>0 ); + $nv = 0; + + for( $i = 0; $i < count( $a ); $i++ ) + { + if( ( int ) $a[ $i ] == 0 ) + { + $stat[ 4 ] += 1; + $nv += 1; + } else { + $stat[ ( int ) $b[ $i ] ] += 1; + } + } + + $row[ 'stat' ] = $stat; + unset( $row[ 'value' ] ); + unset( $row[ 'status' ] ); + + $row[ 'nv' ] = $nv; + } + + return $res; + } public function getHomeData() { $res = $this->query( " diff --git a/js/backend.admin.js b/js/backend.admin.js index 5d4c4e9..8bb138e 100644 --- a/js/backend.admin.js +++ b/js/backend.admin.js @@ -607,6 +607,78 @@ Pianos4Backend.AdminHome = function( selector, params ) } } ); } + + div.append( + $( '
' ) + .attr( 'id', 'stattable' ) + .css( 'width', '800px' ) + .css( 'margin-top', '30px' ) + ); + + udb.app().getModel().rpc( 'getCasesDone', function( data ) + { + $( '#stattable' ).qtable( { + data: data, + columnMode: 'mapping', + columns: [ + { + title: 'Name', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].name ) + ); + }, + }, { + title: 'Total', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].count ) + ); + } + }, { + title: 'No value', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].nv ) + ); + } + }, { + title: 'Analysis started', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].stat[ '1' ] ) + ); + } + }, { + title: 'Comparison started', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].stat[ '3' ] ) + ); + } + }, { + title: 'Comparison submitted', + render: function( data, i, j, cell ) + { + cell.append( + $( '' ) + .text( data[ i ].stat[ '4' ] ) + ); + } + }, + ] + } ); + } ); } } -- GitLab