/**
  * @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);
 }