| Log Message: |
Implemented status system as per bug #743.
The status system consists of a new hash in the course environment,
%statuses, that maps status names (like "Enrolled", "Drop", "Audit") to
(a) a list of allowed abbreviations for the status and (b) a list of
behaviors the system should have when dealing with users who have the
status.
I didn't want to have to mangle that hash-of-hashes-of-arrays myself in
many modules, but I also didn't want to devote an entire module
(Status.pm) to it. So, I'm trying a little experiment: I've added them
as methods to WeBWorK::CourseEnvironment. My thinkint is that since all
the data for these operations comes from the course environment, so why
not have them be course environment methods? Here they are:
status_abbrev_to_name($status_abbrev)
Given the abbreviation for a status, return the name. Returns undef
if the abbreviation is not found.
status_name_to_abbrevs($status_name)
Returns the list of abbreviations for a given status. Returns an
empty list if the status is not found.
status_has_behavior($status_name, $behavior)
Return true if $status_name lists $behavior.
status_abbrev_has_behavior($status_abbrev, $behavior)
Return true if the status abbreviated by $status_abbrev lists
$behavior.
Since I removed the previous $siteDefaults{status} hash from
global.conf, I have already switched modules that formerly used that
hash over to using the new methods:
Authen.pm: use status_abbrev_has_behavior($status, "allow_course_access")
to determine if a user should be allowed to log in.
Feedback.pm: look up status abbreviation using status_abbrev_to_name()
and print the result for the status field in the email.
Instructor.pm: use status_abbrev_has_behavior($status, "include_in_assignment")
to determine if a user should be included in an assignment.
UserList.pm and UsersAssignedToSet.pm: use status_abbrev_to_name() to
get name of CSS class.
|