--- loncom/enrollment/localenroll.pm 2009/09/13 03:14:12 1.39 +++ loncom/enrollment/localenroll.pm 2014/04/30 17:17:25 1.47 @@ -1,6 +1,6 @@ # functions to glue school database system into Lon-CAPA for # automated enrollment -# $Id: localenroll.pm,v 1.39 2009/09/13 03:14:12 raeburn Exp $ +# $Id: localenroll.pm,v 1.47 2014/04/30 17:17:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -123,6 +123,8 @@ sub run() { D A12345678 + + with the following at the top of the file @@ -147,6 +149,17 @@ sub run() { If dates are to included in the XML file, they should be in the format YYYY:MM:DD:HH:MM:SS (: separators required). + The tag need only be used if the credits earned by the students will + be different from the default for the course. The course default is set when the + course is created and can be modifed by a Domain Coordinator via "View or + modify a course or community" on the DC's Main Menu screen. + + A value for should be the institutional status used for students, + and should be one of the types defined in inst_usertypes(). If no status + types are defined for the domain this tag can be omitted. If Autoupdate.pl + is enabled in your domain, updates to the institutional status set here + will be updated by Autoupdate.pl, should changes occur. + If there were 10 students in fs03nop590001, 5 students in fs03nop59o601, 8 students in fs03nop590602, and 2 students in fs03ost580002, then $$reply{'43551dedcd43febmsul1'} = 25 @@ -233,7 +246,7 @@ sub get_sections { The course section or crosslisted course will only be added to the list of affiliates if 'ok' is returned. - new_course takes three arguments - + new_course takes three required arguments - (a) the institutional courseID (in the MSU case this is a concatenation of semester code, department code, course number, and section number e.g., fs03nop590001). @@ -242,10 +255,14 @@ sub get_sections { username:domain (c) the LON-CAPA domain that contains the course + new_course also takes a fourth (optional) argument - + (d) the course co-owners, as a comma-separated list of username:domain for + any co-owners. + =cut sub new_course { - my ($course_id,$owner,$dom) = @_; + my ($course_id,$owner,$dom,$coowners) = @_; my $outcome = 'ok'; return $outcome; } @@ -297,8 +314,14 @@ validate_instcode takes three arguments (c) an optional institutional username for the course owner. An array is returned containing (a) the result of the check for a valid -instcode, and (b) an (optional) course description. +instcode, (b) an (optional) course description, and (c) the default credits +earned by students when completing this course. If no institutional credits +value is available, the default credits for the course can be set via the +course request form, or via XML in a batch file, of via the web form used +by the Domain Coordinator to create new courses one at a time. + A valid instcode is confirmed by returning 'valid'. + If no course description is available, '' should be set as the value of the second item in the returned array. @@ -308,7 +331,8 @@ sub validate_instcode { my ($dom,$instcode,$owner) = @_; my $outcome = ''; my $description = ''; - return ($outcome,$description); + my $credits = ''; + return ($outcome,$description,$credits); } =pod @@ -338,27 +362,31 @@ validate_crsreq takes six arguments - (d) a comma-separated list of institutional affiliations of the course owner. (e) the institutional code (in the MSU case this is a concatenation of - semester code, department code, and course number, e.g., fs03nop590. + semester code, department code, and course number, e.g., fs03nop590). (f) a comma-separated list of institutional sections included in the course request (only applicable to official courses). + (g) an optional reference to a hash of custom form data. + The custom form data will come from crsreq_updates(). A valid courserequest is confirmed by returning 'process'. -The following can be returned: process, rejected, pending, approval or error (with error condition - no :), followed by a : and then an optional message. +The following can be returned: process, rejected, pending, approval or +error (with error condition - no :), followed by a : and then an optional message. (a) process - the requestor is the recorded instructor - create the course -(b) reject - the requestor should never be requesting this course, reject the +(b) rejected - the requestor should never be requesting this course, reject the request permanently (c) pending - the requestor is not the recorded instructor, but could become so after administrative action at the institution. Put the - request in a queue and check localenroll:validate_instcode() - periodically until the status changes to "valid". + request in a queue and, if an official course, check + localenroll:validate_instcode() periodically until the status changes to + "valid". (d) approval - the request will be held pending review by a Domain Coordinator. (e) error (followed by the error condition). =cut sub validate_crsreq { - my ($dom,$owner,$crstype,$inststatuslist,$instcode,$instseclist) = @_; + my ($dom,$owner,$crstype,$inststatuslist,$instcode,$instseclist,$custominfo) = @_; my $outcome = 'approval'; return $outcome; } @@ -374,7 +402,7 @@ lonnet -> lond -> localenroll.pm) The do a table where columns are course type (official, unofficial or community) and rows are institutional affiliations (e.g., Faculty, Staff, Student etc.). -crsreq_checks() takes three arguments: $dom, $reqtyes, $validations. +crsreq_checks() takes three arguments: $dom, $reqtypes, $validations. $dom - the domain for which validation options are needed. $reqtypes - ref to an ARRAY of course types (i.e., official, unofficial and community. $validations - ref to a hash of a hash which will determine whether "validate" @@ -413,6 +441,44 @@ sub crsreq_checks { return 'ok'; } +sub crsreq_updates { + my ($cdom,$cnum,$crstype,$action,$ownername,$ownerdomain,$fullname,$title, + $code,$accessstart,$accessend,$incoming,$outgoing) = @_; + unless (ref($outgoing) eq 'HASH') { + return 'fail'; + } + my %extrainfo; + if (ref($incoming) eq 'HASH') { + %extrainfo = %{$incoming}; + } + if ($action eq 'review') { + $outgoing->{'reviewweb'} = ''; + } elsif ($action eq 'prevalidate') { + $outgoing->{'formitems'} = {}; # key=>value, where key is form element name + # and value is multiple, if there + # are multiple form elements with + # the same name. + } elsif ($action eq 'process') { + $outgoing->{'formitems'} = {}; # key=>value, where key is form element name + # and value is multiple, if there + # are multiple form elements with + # the same name. + } elsif ($action eq 'created') { + $outgoing->{'createdweb'} = ''; + $outgoing->{'createdmsg'} = [{ + mt => '', + args => [], + }]; + } elsif ($action eq 'queued') { + $outgoing->{'queuedmsg'} = [{ + mt => '', + args => [], + }]; + $outgoing->{'queuedweb'} = ''; + } + return 'ok' +} + =pod =item create_password() @@ -521,14 +587,18 @@ sub instcode_format () { Gather acceptable values for institutional categories to use in course creation request form for official courses. - requires four arguments: + requires five arguments: + domain ($dom) reference to array of titles ($codetitles) reference to hash of abbreviations used in categories ($cat_titles). - reference to hash of arrays specifying sort order used in category titles ($cat_order). + reference to hash of arrays specifying sort order used in + category titles ($cat_order). + reference to array which will contain order of component parts used + in institutional code ($code_order). e.g., - @{$codetitles} = ("Year","Semester","Department","Number"); + @{$codetitles} = ('Year','Semester',"Department','Number'); %{$$cat_titles{'Semester'}} = ( fs => 'Fall', @@ -536,23 +606,22 @@ Gather acceptable values for institution us => 'Summer'); @{$$cat_order{'Semester'}} = ('ss','us','fs'); + @{$code_order} = ('Semester','Year','Department','Number'); returns 1 parameter: 'ok' if no processing errors. =cut sub possible_instcodes { - my ($dom,$codetitles,$cat_titles,$cat_order) = @_; + my ($dom,$codetitles,$cat_titles,$cat_order,$code_order) = @_; @{$codetitles} = (); %{$$cat_titles{'Semester'}} = (); @{$$cat_order{'Semester'}} = ('ss','us','fs'); - ($$cat_titles{'Department'},$$cat_order{'Department'}) = &get_all_depts($dom); - ($$cat_titles{'Year'},$$cat_order{'Year'}) = &get_possible_years($dom); + @{$code_order} = (); return 'ok'; } - =pod =item institutional_photos() @@ -728,6 +797,9 @@ sub instcode_defaults { keys will be unique IDs (student or faculty/staff ID) values will be either: scalar (username) or an array if a single ID matches multiple usernames. + (d) $lc_users - reference to hash containing LON-CAPA usernames in + in domain $dom, as keys. Needed if institutional + data source only allows query by username. returns 1 parameter - 'ok' if no processing error, or other value if an error occurred. side effects - populates the $instusers and $instids refs to hashes. @@ -738,7 +810,7 @@ sub instcode_defaults { =cut sub allusers_info { - my ($dom,$instusers,$instids) = @_; + my ($dom,$instusers,$instids,$lc_users) = @_; my $outcome = 'ok'; return $outcome; }