Index: /trunk/moodle/backup/moodle2/backup_stepslib.php =================================================================== --- /trunk/moodle/backup/moodle2/backup_stepslib.php (revision 11536) +++ /trunk/moodle/backup/moodle2/backup_stepslib.php (revision 11558) @@ -927,15 +927,31 @@ // Define sources - $group->set_source_sql(" - SELECT g.* - FROM {groups} g - JOIN {backup_ids_temp} bi ON g.id = bi.itemid - WHERE bi.backupid = ? - AND bi.itemname = 'groupfinal'", array(backup::VAR_BACKUPID)); - - // This only happens if we are including users if ($users) { - $member->set_source_table('groups_members', array('groupid' => backup::VAR_PARENTID)); - } + // This only happens if we are including users + $group->set_source_sql(" + SELECT DISTINCT g.* + FROM {groups} g + JOIN {groups_members} gm ON g.id = gm.groupid + JOIN {backup_ids_temp} bi1 ON gm.userid = bi1.itemid + JOIN {backup_ids_temp} bi2 ON gm.userid = bi2.itemid + WHERE bi1.backupid = ? AND bi2.backupid = ? + AND (bi1.itemname = 'userfinal' OR bi2.itemname = 'groupfinal') + ORDER BY g.id", array(backup::VAR_BACKUPID, backup::VAR_BACKUPID)); + $member->set_source_sql(" + SELECT gm.* + FROM {groups_members} gm + JOIN {backup_ids_temp} bi ON gm.userid = bi.itemid + WHERE gm.groupid = ? + AND bi.backupid = ? + AND bi.itemname = 'userfinal' + ORDER BY gm.id", array(backup::VAR_PARENTID, backup::VAR_BACKUPID)); + } else { + $group->set_source_sql(" + SELECT g.* + FROM {groups} g + JOIN {backup_ids_temp} bi ON g.id = bi.itemid + WHERE bi.backupid = ? + AND bi.itemname = 'groupfinal'", array(backup::VAR_BACKUPID)); + }; $grouping->set_source_sql("