Obvious problems emerged once there were some records in the
workshopform_rubric table with no workshopform_rubric_levels. As l.id
(empty in that case) was used as the key of the returned array, they all
were collapsed into a single one.
QuickForms do not distinguish non-checked radio from the checked radio
with the value "0". So we map the database grade value "0" to a value
"-1" when displaying the form and vice versa when saving the form. This
allowed us to have none radios checked by default and force the grader
to actually answer the form themselves, using the 'required' rule.
This patch introduces a new hidden field with the value "-1". The grade
selectors are compared with this values and must be greater than it.
This should fit well for numerical grades with the range 0..x and scale
items with the range 1..x.
New PARAM_COMPONENT, PARAM_AREA and PARAM_PLUGIN + fixing of hopefully all current incorrect parameter types. This should help with diagnosing of incorrectly named 3rd party plugins too.
The Workshop module using the "Number of errors" grading strategy did
not save all items in the grade mapping table. If some assessment form
fields have weight > 1, the number of possible errors is greater that
the number of the assessment form fields. The previous code deleted all
mappings where the number of errors was greater than the number of
fields.
In this patch, the maximum number of possible errors is calculated as a
sum of weights of all fields. Only mappings over this maximum are
deleted now.
There was a regression of 8fa86f and ac0f8f where I changed the mapping
names but did not use the new names in add_related_files() call.
All credit goes to Eloy Lafuente for spotting the problem and giving me
a hint on how to fix it.
The patch changes workshop_upgrade_module_instances() so that it
processes old workshop records ordered by their id and it keeps the
instances id by using import_record() instead of insert_record().
Thanks to this, there is no mapping of workshop ids needed so the
function workshop_upgrade_workshop_id_mappings() is dropped and all
callers use plain workshop record.
As reported by Trudy Koedooder at http://moodle.org/mod/forum/discuss.php?d=161322
there can be some orphaned grade records without the referenced
assessment. It threw upgrade error. Such grades are now just ignored
during the upgrade.