Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Groups: Difference between revisions

From MoodleDocs
(39 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Improving the Groups design in Moodle 1.9==
{{Moodle 1.9}}
Summary of problems:
==Improved groups/groupings design in Moodle 1.9==
* Can not define groupings at site level
* Groupings not implemented in modules
* Concept of orphaned groups
* Missing enrolment option
* Not integrated into Moodle core
* Unfinished and partially broken code
It would be very hard to improve current code without major refactoring and design changes. --[[User:Skodak|Skodak]] 02:37, 10 April 2007 (CDT)


==Change groups/groupings relationship==
The groups related database structure in 1.9 was reverted to 1.7, groupings are now implemented in a different way than in 1.8. The current design is compatible with 1.7 style groups.
At present both groups and groupings may belong to course, you could one group in several courses and groupings at the same time. This loose relationship of groups and groupings adds too much complexity and is a source of bugs in code.


Each group should be attached to exactly one grouping. See attached db scheme.  
==Alternative rejected proposals==
* [[Obsolete:Groupings OU]]
* [[Obsolete:Groupings and Groups]]
 
==Changed groups/groupings relationship==
In 1.8 both groups and groupings are not linked strictly to one course, you could use one group in several courses and groupings at the same time. This loose relationship of groups and groupings adds too much complexity and could be/is a source of bugs in code.
 
''Solution:'' Each group and grouping links the course id directly. Groupings are only limiting the number of usable groups in activities. This allows free sharing of groups in groupings inside course without potential problems. This idea was proposed by Enrique. See attached db schema.


[[Image:groupsdb.png]]
[[Image:groupsdb.png]]


Benefits:
===course===
* groupingid - default grouping used in course (new activities, etc.)
 
===course_modules===
* groupingid - grouping used in activity
 
===groupings_groups===
renamed table
 
===groups===
reverted to pre 1.8 state (with the password exception)
 
===Benefits===
*fewer tables
*fewer tables
*normalized
*normalized
*simpler SQL
*simpler SQL
*faster
*easier backup/restore implementation
*fully compatible with old group implementation in 1.7
 
==Global groups==
Global groups are not implemented in 1.9. They are not going to be implemented at the database level. Instead some other solution should be present in 2.0. This will require patching of enrolment framework and group/lib.php.
 
==Groups API==
Main public API is in lib/grouplib.php, modules should use only these functions.
 
Moodle core may use other functions defined in group/lib.php
 
== See also ==
* [[Groupings and Groups|Enrique Castro group specification]].
* [[Groupings OU|Open University group specification]].


==Global groupings x Course groupings==
Separate global and course groupings, add global tag to grouping table. Each global grouping has world wide unique identifier.
Benefits:
*allows implementation of access control – local course groupings editable by course teachers, special capability in CONTEXT_SYSTEM for managing of global groupings
*easier backup/restore implementation – local groupings (+groups)  always backed up, global groupings handled differently
*no need for orphan groups anymore - groups attached directly to course (without any grouping)


This separation would make the coding much easier because the two parts would be independent - local grouping would not be breaking the course separation rule (anything outside of course breaks normal backup/restore), the global groupings could have special GUI with permissions/export/import/backup/restore.
==New feature ideas==


Local groupings would be attached to exactly one course, global grouping could be used in many courses at the same time.
===Student self selection of group from grouping===
To be implemented as normal module.


==Enrolment synchronization==
===Linked groups===
Global groupings can partially replace metacourses in some scenarios. They should support synchronization of enrolments based on group membership. Global groupings should allow:
It would allow synchronizing of group membership from different courses; the idea is to have ''linkid'' in groups table and synchronize the groups membership in group functions for adding/removing of members for groups with the same ''linkid''.
*automatic or manual sync of enrolments – reuse code from metacourses
*setting of default sync role id with possible exception for teachers, tutors, etc.  
*import/export of grouping definitions
*mapping of global groupings during course restore (course groupings always backed/restored)


==Other code cleanup==
===Group/grouping cloning===
Current group code does not follow Moodle coding guide, has several unfinished/broken/obsoleted parts, is not integrated into core, etc.
Cloning or duplicating is UI feature only, it helps to prefill new groups/groupings with existing data. In theory it could also copy existing grouping setups from other courses too.
To do:
*integrate setup and upgrade into main lib/db/*.*
*remove columns from groupings table that can be replaced by permissions
*reduce the number of functions, rewrite or fix them, move them into lib/grouplib.php
*split GUI in /group/ – global groupings definition form and course grouping setup
*implement module and course groupings support, fix all mods to use it (course edit form, mod edit form, etc.)
*fix legacy functions
*documentation


==Needed time==
[[Category:Groups]]
1 month for implementation and testing.

Revision as of 10:51, 13 August 2018

Moodle1.9

Improved groups/groupings design in Moodle 1.9

The groups related database structure in 1.9 was reverted to 1.7, groupings are now implemented in a different way than in 1.8. The current design is compatible with 1.7 style groups.

Alternative rejected proposals

Changed groups/groupings relationship

In 1.8 both groups and groupings are not linked strictly to one course, you could use one group in several courses and groupings at the same time. This loose relationship of groups and groupings adds too much complexity and could be/is a source of bugs in code.

Solution: Each group and grouping links the course id directly. Groupings are only limiting the number of usable groups in activities. This allows free sharing of groups in groupings inside course without potential problems. This idea was proposed by Enrique. See attached db schema.

groupsdb.png

course

  • groupingid - default grouping used in course (new activities, etc.)

course_modules

  • groupingid - grouping used in activity

groupings_groups

renamed table

groups

reverted to pre 1.8 state (with the password exception)

Benefits

  • fewer tables
  • normalized
  • simpler SQL
  • easier backup/restore implementation
  • fully compatible with old group implementation in 1.7

Global groups

Global groups are not implemented in 1.9. They are not going to be implemented at the database level. Instead some other solution should be present in 2.0. This will require patching of enrolment framework and group/lib.php.

Groups API

Main public API is in lib/grouplib.php, modules should use only these functions.

Moodle core may use other functions defined in group/lib.php

See also


New feature ideas

Student self selection of group from grouping

To be implemented as normal module.

Linked groups

It would allow synchronizing of group membership from different courses; the idea is to have linkid in groups table and synchronize the groups membership in group functions for adding/removing of members for groups with the same linkid.

Group/grouping cloning

Cloning or duplicating is UI feature only, it helps to prefill new groups/groupings with existing data. In theory it could also copy existing grouping setups from other courses too.