linker.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Sloodle scoreboard
  4. *
  5. * @package sloodlepwreset
  6. * @copyright Copyright (c) 2008 Sloodle (various contributors)
  7. * @license http://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3
  8. *
  9. * @contributor Peter R. Bloomfield
  10. *
  11. */
  12. // This script should be called with the following parameters:
  13. // sloodlecontrollerid = ID of a Sloodle Controller through which to access Moodle
  14. // sloodlepwd = the prim password or object-specific session key to authenticate the request
  15. // sloodleuuid = the UUID of a user agent
  16. // sloodleavname = the name of an avatar
  17. //
  18. // The following parameter is optional:
  19. // sloodleserveraccesslevel = indicates what access level to enforce: 0 = public, 1 = course, 2 = site, 3 = staff
  20. //
  21. //
  22. // If successful, the script will reset the user's password, returning status code 1.
  23. // The data line will contain: username|password
  24. //
  25. // If the user has an active email account associated with their Moodle account, then
  26. // status code -341 is returned, and the password is unchanged.
  27. /** Lets Sloodle know we are in a linker script. */
  28. define('SLOODLE_LINKER_SCRIPT', true);
  29. /** Grab the Sloodle/Moodle configuration. */
  30. require_once('../../init.php');
  31. /** Include the Sloodle PHP API. */
  32. require_once(SLOODLE_LIBROOT.'/sloodle_session.php');
  33. // Authenticate the request, and validate the user, but do not allow auto-registration/enrolment
  34. $sloodle = new SloodleSession();
  35. $sloodle->authenticate_request();
  36. $ao = $sloodle->active_object;
  37. $def = $ao->objectDefinition();
  38. $roundid = $sloodle->course->controller->get_active_roundid($force_create = true);
  39. global $CFG;
  40. $currencyid = $ao->config_value( 'sloodlecurrencyid' );
  41. $currencyname = '';
  42. if ($currencyid) {
  43. // Ge the name of the currency
  44. $currency_recs = sloodle_get_records_sql_params( "select id, name as currency_name from {$CFG->prefix}sloodle_currency_types where id = ?;", array($currencyid));
  45. $currency_rec = array_shift($currency_recs);
  46. $currencyname = $currency_rec->currency_name;
  47. }
  48. $user_point_total_recs = sloodle_get_records_sql_params( "select p.userid as userid, sum(amount) as balance, su.avname as avname, su.uuid as uuid from {$CFG->prefix}sloodle_award_points p inner join {$CFG->prefix}sloodle_users su on p.userid=su.userid where currencyid=? and roundid=? group by userid order by balance desc;", array($currencyid, $roundid));
  49. //$sloodle->response->set_status_code($success_code);
  50. //$sloodle->response->set_status_code(1639271140);
  51. $sloodle->response->set_status_code(1);
  52. $sloodle->response->set_status_descriptor('SCORES');
  53. $sloodle->response->set_request_descriptor('SCORES');
  54. $linesperpage = 10;
  55. if ( isset($def->fixed_parameters) && isset($def->fixed_parameters['linesperpage']) ) {
  56. $linesperpage = $def->fixed_parameters['linesperpage'];
  57. }
  58. $charactersperline = 40;
  59. if ( isset($def->fixed_parameters) && isset($def->fixed_parameters['charactersperline']) ) {
  60. $charactersperline = $def->fixed_parameters['charactersperline'];
  61. }
  62. $page = $ao->config_value( 'sloodleactivepage' );
  63. if (!$page) {
  64. $page = 1;
  65. }
  66. $scoreboardtitle= $ao->config_value('sloodleobjecttitle');
  67. /*
  68. foreach($params as $n=>$v) {
  69. $sloodle->response->add_data_line($n.'|'.$v);
  70. }
  71. */
  72. $num_pages = ceil( count($user_point_total_recs) / $linesperpage );
  73. $sloodle->response->add_data_line("status|$page|$num_pages|$scoreboardtitle||$currencyid|$currencyname");
  74. $offset = ( ($page-1) * $linesperpage );
  75. $page_points = array_slice( $user_point_total_recs, $offset, $linesperpage );
  76. foreach($page_points as $up) {
  77. $uuid = $up->uuid;
  78. $avname = $up->avname;
  79. $score = $up->balance;
  80. $availablechars = $charactersperline - ( strlen($score) + 1 ); // leave room for a space folowed by the score
  81. $displayavname = substr($avname, 0, $availablechars); // truncate the name if it's too long to fit.
  82. $displayavname = str_pad( $displayavname, $availablechars, " ");
  83. $displayline = $displayavname." ".$score;
  84. $sloodle->response->add_data_line("$uuid|$score|$displayline");
  85. }
  86. $renderStr = '';
  87. $sloodle->response->render_to_output($renderStr);
  88. exit;
  89. //$sloodle->response->render_to_output();
  90. ?>