--- loncom/lonnet/perl/lonnet.pm 2004/05/28 17:33:41 1.505 +++ loncom/lonnet/perl/lonnet.pm 2004/06/08 22:09:44 1.506 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.505 2004/05/28 17:33:41 albertel Exp $ +# $Id: lonnet.pm,v 1.506 2004/06/08 22:09:44 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1615,21 +1615,22 @@ sub courseidput { } sub courseiddump { - my ($domfilter,$descfilter,$sincefilter)=@_; + my ($domfilter,$descfilter,$sincefilter,$hostid)=@_; my %returnhash=(); unless ($domfilter) { $domfilter=''; } foreach my $tryserver (keys %libserv) { - if ((!$domfilter) || ($hostdom{$tryserver} eq $domfilter)) { - foreach ( - split(/\&/,&reply('courseiddump:'.$hostdom{$tryserver}.':'. + if (($hostid && $tryserver eq $hostid) || (!$hostid)) { + if ((!$domfilter) || ($hostdom{$tryserver} eq $domfilter)) { + foreach ( + split(/\&/,&reply('courseiddump:'.$hostdom{$tryserver}.':'. $sincefilter.':'.&escape($descfilter), $tryserver))) { - my ($key,$value)=split(/\=/,$_); - if (($key) && ($value)) { - $returnhash{&unescape($key)}=&unescape($value); + my ($key,$value)=split(/\=/,$_); + if (($key) && ($value)) { + $returnhash{&unescape($key)}=&unescape($value); + } } } - } } return %returnhash; @@ -3053,6 +3054,48 @@ sub log_query { return get_query_reply($queryid); } +# ------- Request retrieval of institutional classlists from course homerserver + +sub fetch_enrollment_query { + my ($homeserver,$dom,$affiliatesref,$replyref) = @_; + my $host=$hostname{$homeserver}; + my $cmd = ''; + foreach (keys %{$affiliatesref}) { + $cmd .= $_.'='.join(",",@{$$affiliatesref{$_}}).'%%'; + } + $cmd =~ s/%%$//; + $cmd = &escape($cmd); + my $query = 'fetchenrollment'; + my $queryid=&reply("querysend:".$query.':'.$dom.':'.$ENV{'user.name'}.':'.$cmd,$homeserver); + unless ($queryid=~/^\Q$host\E\_/) { return 'error: '.$queryid; } + my $reply = &get_query_reply($queryid); + unless ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { + unless ($homeserver eq $perlvar{'lonHostID'}) { + my @responses = split/:/,$reply; + my $pathname = $perlvar{'lonDaemons'}.'/tmp'; + foreach (@responses) { + my ($key,$value) = split/=/,$_; + $$replyref{$key} = $value; + if ($value > 0) { + foreach (@{$$affiliatesref{$key}}) { + my $filename = $dom.'_'.$key.'_'.$_.'_classlist.xml'; + my $destname = $pathname.'/'.$filename; + my $xml_classlist = &reply("autoretrieve:".$filename,$homeserver); + unless ($xml_classlist =~ /^error/) { + if ( open(FILE,">$destname") ) { + print FILE &unescape($xml_classlist); + close(FILE); + } + } + } + } + } + } + return 'ok'; + } + return 'error'; +} + sub get_query_reply { my $queryid=shift; my $replyfile=$perlvar{'lonDaemons'}.'/tmp/'.$queryid; @@ -3097,6 +3140,49 @@ sub userlog_query { return &log_query($uname,$udom,'userlog',%filters); } +#--------- Call auto-enrollment subs in localenroll.pm for homeserver for course + +sub auto_run { + my $homeserver = shift; + my $response = &reply('autorun',$homeserver); + return $response; +} + +sub auto_get_sections { + my ($homeserver,$coursecode) = @_; + my @secs = (); + my $response=&unescape(&reply('autogetsections:'.$coursecode,$homeserver)); + unless ($response eq 'refused') { + @secs = split/:/,$response; + } + return @secs; +} + +sub auto_new_course { + my ($homeserver,$course_id,$owner) = @_; + my $response=&unescape(&reply('autonewcourse:'.$course_id.':'.$owner,$homeserver)); + return $response; +} + +sub auto_validate_courseID { + my ($homeserver,$course_id) = @_; + my $response=&unescape(&reply('autovalidatecourse:'.$course_id,$homeserver)); + return $response; +} + +sub auto_create_password { + my ($homeserver,$authparam) = @_; + my $create_passwd = 0; + my $authchk = ''; + my $response=&unescape(&reply('autocreatepassword:'.$authparam,$homeserver)); + if ($response eq 'refused') { + $authchk = 'refused'; + } else { + ($authparam,$create_passwd,$authchk) = split/:/,$response; + } + return ($authparam,$create_passwd,$authchk); +} + # ------------------------------------------------------------------ Plain Text sub plaintext {