Merge branch 'MDL-63973-master' of https://github.com/snake/moodle

This commit is contained in:
Damyon Wiese 2018-11-19 16:28:13 +08:00
commit a356db0db2
3 changed files with 24 additions and 12 deletions

View File

@ -82,9 +82,12 @@ class edit_relatedbadge_form extends moodleform {
$sql = "SELECT b.id, b.name, b.version, b.language, b.type
FROM {badge} b
WHERE b.id <> :badgeid
AND b.id NOT IN (SELECT br.relatedbadgeid
FROM {badge_related} br WHERE br.badgeid = :badgeid1)";
$params = array('badgeid' => $badge->id, 'badgeid1' => $badge->id);
AND b.id NOT IN (
SELECT DISTINCT b.id
FROM {badge_related} br
JOIN {badge} b ON (br.relatedbadgeid = b.id OR br.badgeid = b.id)
WHERE (br.badgeid = :badgeid2 OR br.relatedbadgeid = :badgeid3) AND b.id != :badgeid4)";
$params = ['badgeid' => $badge->id, 'badgeid2' => $badge->id, 'badgeid3' => $badge->id, 'badgeid4' => $badge->id];
if ($badge->type == BADGE_TYPE_COURSE) {
$sql .= " AND (b.courseid = :courseid OR b.type = :badgetype)";
$params['courseid'] = $badge->courseid;

View File

@ -722,8 +722,10 @@ class core_badges_renderer extends plugin_renderer_base {
}
if (has_capability('moodle/badges:configuredetails', $context)) {
$related = $DB->count_records_sql("SELECT COUNT(br.badgeid)
FROM {badge_related} br WHERE br.badgeid = :badgeid", array('badgeid' => $badgeid));
$sql = "SELECT COUNT(br.badgeid)
FROM {badge_related} br
WHERE (br.badgeid = :badgeid OR br.relatedbadgeid = :badgeid2)";
$related = $DB->count_records_sql($sql, ['badgeid' => $badgeid, 'badgeid2' => $badgeid]);
$row[] = new tabobject('brelated',
new moodle_url('/badges/related.php', array('id' => $badgeid)),
get_string('brelated', 'badges', $related)
@ -1502,4 +1504,4 @@ class badge_competencies_alignment implements renderable
$this->alignments = $alignments;
$this->currentbadgeid = $currentbadgeid;
}
}
}

View File

@ -761,7 +761,10 @@ class badge {
*/
public function delete_related_badge($relatedid) {
global $DB;
return $DB->delete_records('badge_related', array('badgeid' => $this->id, 'relatedbadgeid' => $relatedid));
$sql = "(badgeid = :badgeid AND relatedbadgeid = :relatedid) OR " .
"(badgeid = :relatedid2 AND relatedbadgeid = :badgeid2)";
$params = ['badgeid' => $this->id, 'badgeid2' => $this->id, 'relatedid' => $relatedid, 'relatedid2' => $relatedid];
return $DB->delete_records_select('badge_related', $sql, $params);
}
/**
@ -771,7 +774,11 @@ class badge {
*/
public function has_related() {
global $DB;
return $DB->record_exists('badge_related', array('badgeid' => $this->id));
$sql = "SELECT DISTINCT b.id
FROM {badge_related} br
JOIN {badge} b ON (br.relatedbadgeid = b.id OR br.badgeid = b.id)
WHERE (br.badgeid = :badgeid OR br.relatedbadgeid = :badgeid2) AND b.id != :badgeid3";
return $DB->record_exists_sql($sql, ['badgeid' => $this->id, 'badgeid2' => $this->id, 'badgeid3' => $this->id]);
}
/**
@ -783,11 +790,11 @@ class badge {
public function get_related_badges(bool $activeonly = false) {
global $DB;
$params = array('badgeid' => $this->id);
$query = "SELECT b.id, b.name, b.version, b.language, b.type
$params = array('badgeid' => $this->id, 'badgeid2' => $this->id, 'badgeid3' => $this->id);
$query = "SELECT DISTINCT b.id, b.name, b.version, b.language, b.type
FROM {badge_related} br
JOIN {badge} b ON b.id = br.relatedbadgeid
WHERE br.badgeid = :badgeid";
JOIN {badge} b ON (br.relatedbadgeid = b.id OR br.badgeid = b.id)
WHERE (br.badgeid = :badgeid OR br.relatedbadgeid = :badgeid2) AND b.id != :badgeid3";
if ($activeonly) {
$query .= " AND b.status <> :status";
$params['status'] = BADGE_STATUS_INACTIVE;