function build_table($components, $where, $page, $per_page) { global $CFG, $USER; $defaults = $components->as_dict(); list($table, $prequery) = get_pre_query($USER->id); // if they have the ability to view a particular sport then // we have to do some joins in our lookup $viewsports = (isset($where['sports']) or !empty($table)); if ($viewsports) { $extra_values = ", spo.code AS sports, spo.name "; $sports_tables = ", {$CFG->prefix}block_courseprefs_sports spo,\n {$CFG->prefix}block_courseprefs_sportusers spu "; $sports_where = " u.id = spu.usersid \n AND spu.sportsid = spo.id\n AND "; } else { $extra_values = ''; $sports_tables = ''; $sports_where = ''; } $count_sql = "SELECT COUNT(u.id) FROM {$CFG->prefix}block_courseprefs_users u "; $sql = "SELECT u.* {$extra_values}\n FROM {$CFG->prefix}block_courseprefs_users u "; // Do a prequery for those who have student gradeviewer assignments if ($prequery) { $where[] = $prequery; } $limit = $offset = ''; if (!empty($per_page)) { $limit = " LIMIT " . $per_page; $offset = " OFFSET " . $per_page * $page; } $where_sql = "WHERE " . $sports_where . implode(' AND ', $where); // Get our users, hopefully! $users = get_records_sql($sql . $sports_tables . $where_sql . $limit . $offset); $count = count_records_sql($count_sql . $sports_tables . $where_sql); if (!$viewsports) { array_pop($defaults); } // pop per page selector array_pop($defaults); $defaults['grades'] = get_string("grades"); $keys = array_keys($defaults); if (empty($users)) { echo '<div class = "results">' . get_string('content_no_results', 'block_courseprefs') . '</div>'; } else { // Finding where eligible components to preserve lookup $where_eligible_components = array_filter($components->components, create_function('$c', ' return $c->where_eligible(); ')); // Building param map from eligible components $html_params = implode('&', array_map(create_function('$c', 'return "$c->key=$c->value";'), $where_eligible_components)) . '&per_page=' . $per_page . '&'; // The html to do the paging $bar = print_paging_bar($count, $page, $per_page, 'viewgrades.php?' . $html_params, 'page', false, true); echo $bar; echo '<div class = "results">' . $count . get_string('content_results', 'block_courseprefs') . '</div>'; // print the results table $table = new stdClass(); $table->head = $defaults; $table->data = array(); foreach ($users as $user) { // pull the courses where the user is enrolled as a student $course_grades = pull_course_grades($user); // Boolean if they have or don't have courses $no_courses = empty($course_grades); $line = array(); foreach ($keys as $key) { if ($viewsports && $key == 'sports') { $value = flatten_sport($user); } else { if ($key == 'username') { $value = $no_courses ? $user->username : '******' . $CFG->wwwroot . '/blocks/student_gradeviewer/mentee.php?id=' . $user->id . '">' . $user->username . '</a>'; } else { if ($key == 'grades') { $value = $no_courses ? 'NA' : implode('<br/>', $course_grades); } else { $value = $user->{$key}; } } } $line[] = $value; } $table->data[] = $line; } print_table($table); echo $bar; } }
function referral_where($where) { global $CFG, $USER; list($table, $prequery) = get_pre_query($USER->id); $order = in_array('student', $this->keys) ? ", u.lastname, u.firstname ASC" : ''; $sql = " FROM {$CFG->prefix}block_student_referrals ref " . array_reduce($this->keys, array($this, 'reduce_tables')) . " {$table}\n WHERE " . $this->{$this->key . '_where'}($this->id) . " AND\n " . implode(" AND ", array_filter(array_map(array($this, 'transform_where'), $this->keys))) . "\n " . ($where ? " AND " . implode(" AND ", $where) : '') . "\n " . ($prequery ? " AND {$prequery}" : '') . "\n ORDER BY ref.date_referred DESC {$order}"; return $sql; }