/** * @param block_ajax_marking_query $query * @param int|string $userid */ protected function alter_query(block_ajax_marking_query $query, $userid) { // Applies if users are not the final nodes. $clause = array('type' => 'AND', 'condition' => 'quiz_attempts.userid = :quizuseridfilterancestor'); $query->add_where($clause); $query->add_param('quizuseridfilterancestor', $userid); }
/** * Applies the filter needed for course nodes or their descendants * * @param block_ajax_marking_query $query * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Dynamic method names don't register */ protected function alter_query(block_ajax_marking_query $query) { global $USER; // This is for the displayquery when we are making course nodes. $query->add_from(array('table' => 'course', 'alias' => 'course', 'on' => 'course_modules.course = course.id')); $query->add_select(array('table' => 'course', 'column' => 'id', 'alias' => 'courseid', 'distinct' => true)); $query->add_select(array('table' => 'course', 'column' => 'shortname', 'alias' => 'name')); $query->add_select(array('table' => 'course', 'column' => 'fullname', 'alias' => 'tooltip')); // We need the config settings too, if there are any. // TODO this should be in the config filter. $query->add_from(array('join' => 'LEFT JOIN', 'table' => 'block_ajax_marking', 'alias' => 'settings', 'on' => "settings.instanceid = course.id\n AND settings.tablename = 'course'\n AND settings.userid = :settingsuserid")); $query->add_param('settingsuserid', $USER->id); $query->add_select(array('table' => 'settings', 'column' => 'display')); $query->add_select(array('table' => 'settings', 'column' => 'groupsdisplay')); $query->add_select(array('table' => 'settings', 'column' => 'id', 'alias' => 'settingsid')); $query->add_orderby('course.shortname ASC'); }
/** * Returns an SQL snippet that will tell us whether a student is directly enrolled in this * course * * @param block_ajax_marking_query $query * @param array $filters So we can filter by cohortid if we need to * @return array The join and where strings, with params. (Where starts with 'AND) */ private static function apply_sql_enrolled_students(block_ajax_marking_query $query, array $filters) { global $DB, $CFG, $USER; $nextnodefilter = block_ajax_marking_get_nextnodefilter_from_params($filters); // Hide users added by plugins which are now disabled. if (isset($filters['cohortid']) || $nextnodefilter == 'cohortid') { // We need to specify only people enrolled via a cohort. $enabledsql = " = 'cohort'"; } else { if ($CFG->enrol_plugins_enabled) { // Returns list of english names of enrolment plugins. $plugins = explode(',', $CFG->enrol_plugins_enabled); list($enabledsql, $params) = $DB->get_in_or_equal($plugins, SQL_PARAMS_NAMED, 'enrol001'); $query->add_params($params); } else { // No enabled enrolment plugins. $enabledsql = ' = :sqlenrollednever'; $query->add_param('sqlenrollednever', -1); } } $sql = <<<SQL SELECT NULL FROM {enrol} enrol INNER JOIN {user_enrolments} user_enrolments ON user_enrolments.enrolid = enrol.id WHERE enrol.enrol {$enabledsql} AND enrol.courseid = moduleunion.course AND user_enrolments.userid != :enrolcurrentuser AND user_enrolments.userid = moduleunion.userid SQL; $query->add_where(array('type' => 'AND', 'condition' => "EXISTS ({$sql})")); $query->add_param('enrolcurrentuser', $USER->id, false); }
/** * Not sure we'll ever need this, but just in case... * * @static * @param block_ajax_marking_query $query * @param int $userid */ public function alter_query(block_ajax_marking_query $query, $userid) { $clause = array('type' => 'AND', 'condition' => 'sub.userid = :assignmentuseridfilteruserid'); $query->add_where($clause); $query->add_param('assignmentuseridfilteruserid', $userid); }
/** * This is for when a courseid node is an ancestor of the node that has been * selected, so we just do a where. * * @param block_ajax_marking_query $query * @param int|string $cohortid * @return void */ protected function alter_query(block_ajax_marking_query $query, $cohortid) { $clause = array('type' => 'AND', 'condition' => 'cohort.id = :cohortidfiltercohortid'); $query->add_where($clause); $query->add_param('cohortidfiltercohortid', $cohortid); }
/** * Adds SQL for when there is a discussion node as an ancestor of the current nodes. * * @static * @param block_ajax_marking_query $query * @param int $discussionid */ protected function alter_query(block_ajax_marking_query $query, $discussionid) { $clause = array('type' => 'AND', 'condition' => 'discussion.id = :discussionidfilterdiscussionid'); $query->add_where($clause); $query->add_param('discussionidfilterdiscussionid', $discussionid); }
/** * This is for when a courseid node is an ancestor of the node that has been * selected, so we just do a where. * * @param block_ajax_marking_query $query * @param int $courseid */ protected function alter_query(block_ajax_marking_query $query, $courseid) { $conditions = array('type' => 'AND', 'condition' => 'moduleunion.course = :courseidancestorcourseid'); $query->add_where($conditions); $query->add_param('courseidancestorcourseid', $courseid); }
/** * Used when there is an ancestor node representing a coursemodule. * * @static * @param block_ajax_marking_query $query * @param int|string $groupid * @return void */ protected function alter_query(block_ajax_marking_query $query, $groupid) { $conditions = array('type' => 'AND', 'condition' => block_ajax_marking_get_countwrapper_groupid_sql() . ' = :groupid'); $query->add_where($conditions); $query->add_param('groupid', $groupid); }
/** * Adds SQL to a dynamic query for when there is a question node as an ancestor of the current * nodes. * * @static * @param block_ajax_marking_query $query * @param int $questionid */ protected function alter_query(block_ajax_marking_query $query, $questionid) { $clause = array('type' => 'AND', 'condition' => 'moduleunion.questionid = :quizfilterquestionidancestor'); $query->add_where($clause); $query->add_param('quizfilterquestionidancestor', $questionid); }