The usage of Curriculum has been extended quite a bit from the OpenACS 3 version, which wasn't subsite aware and didn't allow for several curriculums to be presented at once. The new expanded Curriculum module has also been adapted into a .LRN applet and portlet. One nice feature that has been kept from the original module is the ability to serve curriculums to both logged-in users and casual surfers. Non-registered users will get a cookie that keeps track of the curriculum progress. Logged-in users get their progress updated in the database, and are thus able to continue where they were last even if they are not using their own computer.
The definition of the curriculums and their elements (and respective metadata) is entered via ad_forms into the cu_curriculums and the cu_elements tables. Elements, not curriculums, are actually the most fundamental objects that the Curriculum package works with. Presenting the elements as belonging to a certain curriculum, in turn belonging to a certain instance, is more or less a matter of display finesses. The curriculum and element definition tables are cached per instance, and the cache gets flushed via a callback whenever a curriculum or element is modified by an editor or publisher.
The tracking of users' learning progress is handled with a registered filter that notes whenever a user visits a URL that has been defined as a learning element in a curriculum. If the URL is external to the subsite that hosts the Curriculum instance, it will be modified in the bar so as to lead to a "clickthrough" script where the tracking takes place as the web page is delivered. In order to display the curriculum bar on external pages too, these are presented with frames. A user's individual curriculum progress is set and updated in a cookie. Logged-in users get their learning progress recorded in the cu_user_element_map. In order for logged-in users to have more control over which curriculums to follow and which not to, the cu_user_curriculum_map keeps track of which curriculums a user wants displayed. This table is cached per user.
Curriculum uses the Workflow package for managing the process of publishing curriculums. A default workflow - distinguishing between the roles of Creator, Editor, and Publisher - is automatically created when installing the Curriculum package. Every instance will use an individual copy of this default workflow. If you are dissatisfied with the default workflow template and wish to create another one to your own liking, please refer to the Workflow Developer's Guide.