## 1.5. Resource Course

Summary

The course resides in the repository as a learning resource of type course. It is a special kind of learning resource as it has the ability to aggregate other learning resources, except courses.

It is a structural container for the course building blocks. The course is structured as a tree. And this structure is defining a learning path by means of visibility and accessability rules. The structure also offers an assessment and score facility to evaluate the course viewers progress.

It is an administrative container for the course. As it may have associated groups, areas, rights to control and organize course access.

It is important to understand the difference between the run and editor characteristic of a course. And also the ideas of the publish mechanism, which defines the transition from the editor view to the run view.

There is a course configuration with course wide settings.

### 1.5.1. Course structure and course building blocks

The course is hierarchly structured - a tree - whereas each course node represents a building block. Such a building block is an encapsulated functionality for the course. These building blocks can be divided into the categories Content and structure , Assessment and Scoring , Collaboration . Each building blocks can control access and visibility with help of the visibility and accessability rules . Following building blocks are implemented so far:

1. Content and structure

   - Structure, `STCourseNode` :

     Structure element, noteworthy is the ability to calculate a score or passed value from other assessable course nodes.

   - External Page, `TUCourseNode` :

     An URL pointing to an external resource is integrated into the LMS without a HTML frames construct. Hence special requirements to the external resource apply.

   - CP learning content , `CPCourseNode` :

     Reference another learning resource of type IMS content packaging from the repository.

   - Single Page, `SPCourseNode` :

     Simple HTML page to display, either create one with the internal HTML editor or reference one from a storage folder.

   - SCORM learning content, `ScormCourseNode` :

     Reference another learning resource of type SCORM package from the repository.

   - Self-Test, `IQSELFCourseNode`:

     Reference another learning resource of type self test based on IMS QTI from the repository. It is listed here instead of assessment because a self test does generate only anonymized results.

   - File-Dialog, `DialogCourseNode`:

     Collection of files users can upload and discuss. Uses a forum compoment for each file to be discussed.

2. Collaboration

   - Folder, `BCCourseNode`

     File exchange between course participiants.

   - Contact Form, `COCourseNode`

     Send an e-mail to a configured recipient group from the logged in user.

   - Enrolment , `ENCourseNode`

     As a precondition for the enrolment groups or areas must have been configured for the course. If this is the case an automatic enrolment to the course can be realized here.

   - Forum , `FOCourseNode`

     Discussion forum.

3. Assessment and Scoring

   - Assessment , `MSCourseNode`

     Configuring an assessment building block influences the assessment tool which is at disposal to the course tutors. Check the description of the assessment and score facility.

   - Test, `IQTestCourseNode`:

     Reference another learning resource of type test, based on IMS QTI, from the repository. The results from the test can be accessed in the visibility and accessability rules.

   - Questionnaire , `IQSURVCourseNode`

   - Task, `TACourseNode`

### 1.5.2. Course run, User course session, Course environment

The `CourseFactory` ensures that a course is loaded only once into the RAM. Thus all cours participants, tutors, authors are sharing the same course object. It is clear that each course user must have its individual course run session where user specific data is processed. To accomplish this the course has a `UserCourseEnvironment` which holds the user specific course run data. Besides this the `CourseEnvironment` aggregates runtime course information which again is shared between all users.

### 1.5.3. Editor - publish - run

The course is made persistent with the `XStreamHelper` using XML object serialization. Because of the sophisticated publish mechanism there is a persistent valid course editor xml tree structure and a valid course run xml tree structure co-existing. The course run is the users view to the course, and the course author sees the course in the editor view.

The author can select specific or all changes in the course editor to be published into the run structure. This process is defined in the `PublishController` roughly speaking it consists of:

- removing nodes marked for deletion from the editor and run treemodels

- copy new added nodes from the editor treemodel to the run treemodel

- apply changes in existing nodes from the editor to run treemodel.

### 1.5.4. Configuration

Each course has associated a course configuration which is persisted as XML file in the same place as the run structure and editor strucuture files.

This settings contain so far configurations for:

- Course activity logging levels:

  This option affects also the behaviour of the log file download.

- Course chat enabled/disabled:

  A change in this setting takes effect only in new started course sessions.

- Individual course CSS layout option:

  A change in this setting takes effect only in new started course sessions.

- Specifying a resource folder which is shareable between courses.

- Enabling/disabling evidence of achievement:

  Changes in this option trigger the deletion of existing achievements, or a recalculation respectively. It is clear that the recalculation may take a while.

If a new configuration must be added one has to follow the guidelines described in `CourseConfig` . Special care must be taken to increase the `CourseConfig` 's version number, once a change was active in a productive environment.

### 1.5.5. Visibility and accessability rules

This rules are specified like arithmetic expressions, whereas the valid functions and units are registered in the `ConditionInterpreter`. Each building block has associated a visibility and accessability condition which is recursively evaluated during the users course run. Once a building blocks visibility or accessability is false the child nodes or not evaluated.

### 1.5.6. Assessment and scoring

Some of the course building blocks are of type `AssessableCourseNode`. The assessable course nodes use the `AssessmentManager` from the course environment to set and get assessment information.

More info on this will be added soon.

### 1.5.7. Groups - areas - roles - rights

See Section 1.7, “Groups”

### 1.5.8. Activity logging and tracking

Every controller can have a `UserActivityLogger`. In the course this logger is set for all controllers involved. The course offers three different logfiles that can be configured using the course configuration.

The course uses the `PersistingAuditManager` from the course environment to log the user activities.

More info on this will be added soon.