Feature Wiki
Tabs
Plugin Hook for Assignments
Page Overview
[Hide]1 Initial Problem
New types of assignments currently need to be implemented as core features. There is no option to extend the list of assignment types for the exercise.
Two examples from currently running projects show the application of such a plugin hook:
A new assignment type realizes programming tasks that are evaluated by an external server. The students program is provided as a set of files that must follow certain naming conventions. When submitted, the files are immediately sent for evaluation.
Another assignment type is intended to write multi-page essays online. The editor for this should be able to intercept network interruptions, keep change logs and offer additional functions such as notes. The correction must support online comments in the text and offer a management of first and second correctors.
These application areas (computer science, law) are special and would overload the general functionality of the exercise. Since the exercise already has the structure to support different assignment types, the support of plugins is a logical progression.
2 Conceptual Summary
The exercise component should be extended by a hook for assignment plugins. The plugin interface builds on the existing definition of assignment types. A plugin for the new hook provides a list of new assignment types (e.g. for individual users or teams). When creating an assignment, the types of plugins are additionally selectable.
The assignment type of a plugin can add settings to the form in the assignment editor. It can add tabs to the editor and remove existing ones.
In the overview of the exercise, individual sections of an assignment can be supplemented or replaced entirely:
- Work instruction: supplement
- Your submission: supplement or replace
- Tutor's evaluation: supplement
- Sample solution: replace
Under Submissions and Grades the list of participants can be filtered by the plugin, e.g. as a result of the corrector management. In the actions menu of the submissions, additional entries can be added or removed, e.g. to open a special feedback screen. Alternatively, the whole sub tab "Assignment view" can be replaced by the plugin if its assignment is selected.
3 User Interface Modifications
3.1 List of Affected Views
An assignment type plugin can modify the following pages of an exercise:
- Editing (settings) of an assignment
- Overview of assignments
- Submissions and Grades / Participant View: Actions menu
- Submissions and Grades / Assignment View: Actions menu or whole content
3.2 User Interface Details
3.3 New User Interface Concepts
There are no new UI elements defined by the plugin hook. A plugin gets the possibility to modify existing views.
4 Technical Information
Each assignment type must provide a type class and a GUI class that implement the ilExAssignmentTypeInterface and ilExAssignmentTypeGUIInterface interfaces. The following functions need to be added to the interfaces.
ilExAssignmentTypeInterface
- deleteSpecificProperties
- filterMembersForGrading
ilExAssignmentTypeGUIInterface
- getOverviewAdditionalInstructions
- hasOwnOverviewSubmission
- getOverviewSubmission
- getOverviewAdditionalFeedback
- hasOwnOverviewGeneralFeedback
- getOverviewGeneralFeedback
- hasOwnGradingByAssignment
- showGradingByAssignment
- modifyGradingActionItems
The already deprecated integer IDs of assignment types must be replaced by string identifiers to avoid conflicts between different plugins.
- ilExAssignment will remove the functions setType, getType and isValidType. It will add the function setAssignmentType that sets an assignment type object.
- ilExAssignmentTypes will remove the functions getAllIds, isValidId, getById, getIdsForSubmissionType and will add getByStringIdentifier, getStringIdentifiersForSubmissionType. The function getByLegacyId will be used by ilExerciseDataSet to map IDs in old export files to the new submissionTypes.
- ilExAssignmentTypesGUI will remove getById and getIdForClassName and will add getByStringIdentifier and getByClassName.
An assignment type plugin class must extend ilAssignmentHookPlugin and implement the following abstract functions:
- getAssignmentTypeStringIdentifiers
- getAssignmentTypeByStringIdentifier
- getAssignmentTypeGuiByStringIdentifier
- getAssignmentTypeGuiClassNames
A plugin may be inactive or missing. In this case ilExAssignmentTypes and ilExAssignmentTypeGUIInterface will provide dummy classes ilExAssTypeInactive and ilExAssTypeInactiveGUI if no active type is found for a given string identifier.
5 Privacy Information
No extra data is processed through the plugin hook. Data protection must be respected by the developers of the plugins and the installation administrators. Without plugins ILIAS behaves as in the standard.
6 Security Implications
Security must be respected by the developers of the plugins. The plugin hook does not affect security. Without plugins ILIAS behaves as in the standard.
7 Contact
- Author of the Request: Neumann, Fred [fneumann] (can provide a pull request)
- Maintainer: Killing, Alexander [alex]
- Implementation of the feature is done by: {The maintainer must add the name of the implementing developer.}
8 Funding
If you are interest in funding this feature, please add your name and institution to this list.
- Funding can be provided by the EDUTIEK project
9 Discussion
Kunkel, Matthias [mkunkel], 21 MAY 2021 : We had a workshop today together with the maintainer of the exercise component, Alex Killing. Due to planned refactorings in the component he rejected the introduction of a plugin slot for assignments in the current state of the code. First, there have to be made necessary refactorings of the component before introducing such a slot. This won't be possible before ILIAS 9 due to the urgent and time-consuming refactorings for PHP8 in ILIAS 8.
10 Implementation
{The maintainer has to give a description of the final implementation and add screenshots if possible.}
Test Cases
Test cases completed at {date} by {user}
- {Test case number linked to Testrail} : {test case title}
Approval
Approved at {date} by {user}.
Last edited: 2. Aug 2021, 09:01, Kunkel, Matthias [mkunkel]