4require_once
'Modules/Test/classes/inc.AssessmentConstants.php';
5require_once
'Services/Table/classes/class.ilTable2GUI.php';
23 $this->
object = $a_object->object;
26 public function executeCommand()
35 if(!$this->object->getHighscoreEnabled())
38 $ilCtrl->redirectByClass(
'ilObjTestGUI');
43 $ilCtrl->saveParameter($this,
'active_id');
47 case 'showResultsToplistByTime':
52 case 'showResultsToplistByScore':
68 'toplist_by_score',
$lng->txt(
'toplist_by_score'), $ctrl->
getLinkTarget($this,
'showResultsToplistByScore')
72 'toplist_by_time',
$lng->txt(
'toplist_by_time'), $ctrl->
getLinkTarget($this,
'showResultsToplistByTime')
91 $table_gui->setRowTemplate(
'tpl.toplist_tbl_rows.html',
'Modules/Test');
92 $table_gui->setData(
$data);
93 $table_gui->setTitle(sprintf(
$lng->txt(
'toplist_top_n_results'), $this->object->getHighscoreTopNum()));
95 $html .= $table_gui->getHTML();
104 $data2 = $this->getUserToplistByPercentage(
$_GET[
'ref_id'],
$ilUser->getID());
106 $table_gui2->setRowTemplate(
'tpl.toplist_tbl_rows.html',
'Modules/Test');
107 $table_gui2->setData($data2);
108 $table_gui2->setTitle(
$lng->txt(
'toplist_your_result'));
110 $html .= $table_gui2->getHTML();
113 $tpl->setVariable(
"ADM_CONTENT", $html);
127 $data = $this->getGeneralToplistByWorkingtime(
$_GET[
'ref_id'],
$ilUser->getId());
129 $table_gui->setRowTemplate(
'tpl.toplist_tbl_rows.html',
'Modules/Test');
130 $table_gui->setData(
$data);
131 $table_gui->setTitle(sprintf(
$lng->txt(
'toplist_top_n_results'), $this->object->getHighscoreTopNum()));
133 $html .= $table_gui->getHTML();
142 $data2 = $this->getUserToplistByWorkingtime(
$_GET[
'ref_id'],
$ilUser->getID());
144 $table_gui2->setRowTemplate(
'tpl.toplist_tbl_rows.html',
'Modules/Test');
145 $table_gui2->setData($data2);
146 $table_gui2->setTitle(
$lng->txt(
'toplist_your_result'));
148 $html .= $table_gui2->getHTML();
151 $tpl->setVariable(
"ADM_CONTENT", $html);
164 if($this->object->getHighscoreAchievedTS())
169 if($this->object->getHighscoreScore())
174 if($this->object->getHighscorePercentage())
179 if($this->object->getHighscoreHints())
184 if($this->object->getHighscoreWTime())
199 $hours = intval(intval($seconds) / 3600);
200 $retval .= str_pad($hours, 2,
"0", STR_PAD_LEFT) .
":";
201 $minutes = intval(($seconds / 60) % 60);
202 $retval .= str_pad($minutes, 2,
"0", STR_PAD_LEFT) .
":";
203 $seconds = intval($seconds % 60);
204 $retval .= str_pad($seconds, 2,
"0", STR_PAD_LEFT);
213 private function getGeneralToplistByPercentage($a_test_ref_id, $a_user_id)
219 SELECT tst_result_cache.*, round(points/maxpoints*100,2) as percentage, tst_pass_result.workingtime, usr_data.usr_id, usr_data.firstname, usr_data.lastname
220 FROM object_reference
221 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
222 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
223 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
224 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi AND tst_pass_result.pass = tst_result_cache.pass
225 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
226 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
227 ORDER BY percentage DESC
228 LIMIT 0, ' .
$ilDB->quote($this->object->getHighscoreTopNum(),
'integer') .
'
249 private function getGeneralToplistByWorkingtime($a_test_ref_id, $a_user_id)
255 SELECT tst_result_cache.*, round(points/maxpoints*100,2) as percentage, tst_pass_result.workingtime, usr_data.usr_id, usr_data.firstname, usr_data.lastname
256 FROM object_reference
257 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
258 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
259 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
260 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi AND tst_pass_result.pass = tst_result_cache.pass
261 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
262 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
263 ORDER BY workingtime ASC
264 LIMIT 0, ' .
$ilDB->quote($this->object->getHighscoreTopNum(),
'integer') .
'
288 $item[
'Rank'] = $i .
'. ';
290 if($this->object->isHighscoreAnon() &&
$row[
'usr_id'] != $a_user_id)
292 $item[
'Participant'] =
"-, -";
296 $item[
'Participant'] =
$row[
'lastname'] .
', ' .
$row[
'firstname'];
299 if($this->object->getHighscoreAchievedTS())
305 if($this->object->getHighscoreScore())
307 $item[
'Score'] =
$row[
'reached_points'] .
' / ' .
$row[
'max_points'];
310 if($this->object->getHighscorePercentage())
312 $item[
'Percentage'] =
$row[
'percentage'] .
'%';
315 if($this->object->getHighscoreHints())
317 $item[
'Hints'] =
$row[
'hint_count'];
320 if($this->object->getHighscoreWTime())
325 $item[
'Highlight'] = (
$row[
'usr_id'] == $a_user_id) ?
'tblrowmarked' :
'';
334 private function getUserToplistByWorkingtime($a_test_ref_id, $a_user_id)
342 SELECT count(tst_pass_result.workingtime) as count
343 FROM object_reference
344 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
345 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
346 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
347 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
348 AND tst_pass_result.pass = tst_result_cache.pass
349 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
350 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
351 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
355 FROM object_reference
356 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
357 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
358 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
359 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
360 AND tst_pass_result.pass = tst_result_cache.pass
361 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
362 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
368 $better_participants =
$row[
'count'];
369 $own_placement = $better_participants + 1;
373 SELECT count(tst_pass_result.workingtime) as count
374 FROM object_reference
375 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
376 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
377 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
378 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
379 AND tst_pass_result.pass = tst_result_cache.pass
380 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
381 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer')
384 $number_total =
$row[
'count'];
388 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage ,
389 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
390 FROM object_reference
391 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
392 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
393 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
394 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
395 AND tst_pass_result.pass = tst_result_cache.pass
396 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
398 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
399 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
402 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage,
403 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
404 FROM object_reference
405 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
406 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
407 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
408 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
409 AND tst_pass_result.pass = tst_result_cache.pass
410 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
411 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
412 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
415 SELECT tst_pass_result.workingtime
416 FROM object_reference
417 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
418 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
419 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
420 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
421 AND tst_pass_result.pass = tst_result_cache.pass
422 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
423 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
425 ORDER BY workingtime DESC
429 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage,
430 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
431 FROM object_reference
432 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
433 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
434 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
435 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
436 AND tst_pass_result.pass = tst_result_cache.pass
437 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
438 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
439 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
442 SELECT tst_pass_result.workingtime
443 FROM object_reference
444 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
445 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
446 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
447 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
448 AND tst_pass_result.pass = tst_result_cache.pass
449 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
450 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
452 ORDER BY workingtime DESC
455 ORDER BY workingtime ASC
459 $i = $own_placement - (($better_participants >= 3) ? 3 : $better_participants);
465 $item = array(
'Rank' =>
'...');
478 if($number_total > $i)
480 $item = array(
'Rank' =>
'...');
493 private function getUserToplistByPercentage($a_test_ref_id, $a_user_id)
501 SELECT count(tst_pass_result.workingtime) as count
502 FROM object_reference
503 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
504 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
505 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
506 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
507 AND tst_pass_result.pass = tst_result_cache.pass
508 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
509 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
510 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
511 AND round(reached_points/max_points*100) >=
513 SELECT round(reached_points/max_points*100)
514 FROM object_reference
515 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
516 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
517 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
518 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
519 AND tst_pass_result.pass = tst_result_cache.pass
520 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
521 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
527 $better_participants =
$row[
'count'];
528 $own_placement = $better_participants + 1;
532 SELECT count(tst_pass_result.workingtime) as count
533 FROM object_reference
534 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
535 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
536 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
537 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
538 AND tst_pass_result.pass = tst_result_cache.pass
539 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
540 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer')
543 $number_total =
$row[
'count'];
547 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage ,
548 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
549 FROM object_reference
550 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
551 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
552 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
553 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
554 AND tst_pass_result.pass = tst_result_cache.pass
555 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
557 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
558 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
561 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage,
562 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
563 FROM object_reference
564 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
565 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
566 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
567 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
568 AND tst_pass_result.pass = tst_result_cache.pass
569 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
570 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
571 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
572 AND round(reached_points/max_points*100) >=
574 SELECT round(reached_points/max_points*100)
575 FROM object_reference
576 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
577 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
578 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
579 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
580 AND tst_pass_result.pass = tst_result_cache.pass
581 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
582 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
584 ORDER BY round(reached_points/max_points*100) ASC
588 SELECT tst_result_cache.*, round(reached_points/max_points*100) as percentage,
589 tst_pass_result.workingtime, usr_id, usr_data.firstname, usr_data.lastname
590 FROM object_reference
591 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
592 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
593 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
594 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
595 AND tst_pass_result.pass = tst_result_cache.pass
596 INNER JOIN usr_data ON usr_data.usr_id = tst_active.user_fi
597 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
598 AND tst_active.user_fi != ' .
$ilDB->quote($a_user_id,
'integer') .
'
599 AND round(reached_points/max_points*100) <=
601 SELECT round(reached_points/max_points*100)
602 FROM object_reference
603 INNER JOIN tst_tests ON object_reference.obj_id = tst_tests.obj_fi
604 INNER JOIN tst_active ON tst_tests.test_id = tst_active.test_fi
605 INNER JOIN tst_result_cache ON tst_active.active_id = tst_result_cache.active_fi
606 INNER JOIN tst_pass_result ON tst_active.active_id = tst_pass_result.active_fi
607 AND tst_pass_result.pass = tst_result_cache.pass
608 WHERE object_reference.ref_id = ' .
$ilDB->quote($a_test_ref_id,
'integer') .
'
609 AND tst_active.user_fi = ' .
$ilDB->quote($a_user_id,
'integer') .
'
611 ORDER BY round(reached_points/max_points*100) ASC
614 ORDER BY round(reached_points/max_points*100) DESC, tstamp ASC
618 $i = $own_placement - (($better_participants >= 3) ? 3 : $better_participants);
624 $item = array(
'Rank' =>
'...');
637 if($number_total > $i)
639 $item = array(
'Rank' =>
'...');
This class provides processing control methods.
getLinkTargetByClass($a_class, $a_cmd="", $a_anchor="", $a_asynch=false, $xml_style=true)
Get link target for command using gui class name.
getLinkTarget(&$a_gui_obj, $a_cmd="", $a_anchor="", $a_asynch=false, $xml_style=true)
Get link target for command using gui object.
@classDescription Date and time handling
const HIGHSCORE_SHOW_OWN_TABLE
const HIGHSCORE_SHOW_TOP_TABLE
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="")
Add a column to the header.
setEnableNumInfo($a_val)
Set enable num info.
setLimit($a_limit=0, $a_default_limit=0)
set max.
clearTargets()
clear all targets
setTabActive($a_id)
DEPRECATED.
setBackTarget($a_title, $a_target, $a_frame="")
back target for upper context
addTab($a_id, $a_text, $a_link, $a_frame="")
Add a Tab.
prepareTable(ilTable2GUI $table_gui)
manageTabs(ilTabsGUI $tabsGUI, ilCtrl $ctrl, ilLanguage $lng, $activeTabId)
showResultsToplistByScore()
getResultTableRow($row, $i, $a_user_id)
showResultsToplistByTime()
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.