dirname() is a slow function compared with __DIR__ and using
'/../'. Moodle has a large number of legacy files that are included
each time a page loads and is not able to use an autoloader as it is
functional code. This allows those required includes to perform as
best as possible in this situation.
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.
This seems to be over-desing-patternized. Methods needed by standard
eval plugins (ie part of standard distribution) are part of strategy
API. Contributed eval methods will have to patch strategy plugins if
they need some other data from them.
The only weak point here is that we store a raw grade into
workshop_grades and not a direct id of the selected level. Therefore,
when re-assessing, we need to actually guess what level the assessor
chose previously. This is not problem if there are not two levels with
the same grade. Such case is not common when using Rubric. In the
future, this may get refactored so Rubric would use its own storage of
filled assessment forms.