Quick summary!

See the wiki too - 

http://docs.moodle.org/en/How_groups_work_in_Moodle
http://docs.moodle.org/en/Groups_documentation_for_module_developers

To install - run install.php. This create the appropriate database tables and 
sets some default config for using an IMS Enterprise web service (in particular 
the default setting is that such a web service is not called).

The user interface for managing groups for a course is groupsui/index.php. 
A grouping is just a set of groups - the idea is that you can have several 
groupings for a course, and then choose different groupings for different 
activities. 

Note that installing this code does not enable you to actually use the groupings 
with activity modules - this is coming :-)

configui - This contains the user interface for changing the IMS Enterprise web 
service config

db - all the functions that access the database, only used internally. There are 
basically six tables that this code deals with  groups_groups, 
groups_courses_groups,groups_groups_users, groups_groupings  

groupui - the user interface for managing the groups and groupings of a course. 
This uses Ajax so most of the code for the user interface is in the javascript 
files - the PHP files just send back an appropriate XML response to specific
POST requests. You'll probably need to know the basics of how Ajax works to 
understand the Javascript. 

lib - The main libraries for the user interface and other moodle code to user. 
-- basicgrouplib.php contains the basic functions for  adding users to groups, 
deleting groups etc.
-- groupinglib.php contains the basic function for groupings e.g. creating 
groupings, adding groups to groupings
-- extendedgrouplib.php contains other functions that are useful and use the 
basic group and grouping functions
-- lib.php is just there to let you include all the libraries more easily
-- utillib.php contains functions that are handy but don't use any of the group 
or grouping library function e.g. 
things like getting the names of users 
-- configlib.php - Contains wrapper functions for getting and setting config

unittests - This directory needs a bit of sorting out, and I've just discovered 
that I've broken one of the main 
tests...
 

strings.php - This is stuff that will need to go in the language files - it's 
here for convenience while I'm doing the
development. 

