--- loncom/lonnet/perl/lonnet.pm 2005/10/10 18:15:52 1.661 +++ loncom/lonnet/perl/lonnet.pm 2005/10/11 21:29:38 1.662 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.661 2005/10/10 18:15:52 raeburn Exp $ +# $Id: lonnet.pm,v 1.662 2005/10/11 21:29:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,7 +37,7 @@ use HTTP::Date; use vars qw(%perlvar %hostname %badServerCache %iphost %spareid %hostdom %libserv %pr %prp $memcache %packagetab - %courselogs %accesshash %userrolehash $processmarker $dumpcount + %courselogs %accesshash %userrolehash %domainrolehash $processmarker $dumpcount %coursedombuf %coursenumbuf %coursehombuf %coursedescrbuf %courseinstcodebuf %courseownerbuf %domaindescription %domain_auth_def %domain_auth_arg_def %domain_lang_def %domain_city %domain_longi %domain_lati $tmpdir $_64bit @@ -1610,6 +1610,31 @@ sub flushcourselogs { delete $userrolehash{$entry}; } } +# +# Reverse lookup of domain roles (dc, ad, li, sc, au) +# + my %domrolebuffer = (); + foreach my $entry (keys %domainrolehash) { + my ($role,$uname,$udom,$runame,$rudom,$rsec)=split/:/,$entry; + if ($domrolebuffer{$rudom}) { + $domrolebuffer{$rudom}.='&'.&escape($entry). + '='.&escape($domainrolehash{$entry}); + } else { + $domrolebuffer{$rudom}.=&escape($entry). + '='.&escape($domainrolehash{$entry}); + } + delete $domainrolehash{$entry}; + } + foreach my $dom (keys(%domrolebuffer)) { + foreach my $tryserver (keys %libserv) { + if ($hostdom{$tryserver} eq $dom) { + unless (&reply('domroleput:'.$dom.':'. + $domrolebuffer{$dom},$tryserver) eq 'ok') { + &logthis('Put of domain roles failed for '.$dom.' and '.$tryserver); + } + } + } + } $dumpcount++; } @@ -1686,14 +1711,23 @@ sub linklog { sub userrolelog { my ($trole,$username,$domain,$area,$tstart,$tend)=@_; if (($trole=~/^ca/) || ($trole=~/^aa/) || - ($trole=~/^in/) || ($trole=~/^cc/) || + ($trole=~/^in/) || ($trole=~/^cc/) || ($trole=~/^ep/) || ($trole=~/^cr/) || ($trole=~/^ta/)) { my (undef,$rudom,$runame,$rsec)=split(/\//,$area); $userrolehash {$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} =$tend.':'.$tstart; - } + } + if (($trole=~/^dc/) || ($trole=~/^ad/) || + ($trole=~/^li/) || ($trole=~/^li/) || + ($trole=~/^au/) || ($trole=~/^dg/) || + ($trole=~/^sc/)) { + my (undef,$rudom,$runame,$rsec)=split(/\//,$area); + $domainrolehash + {$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} + = $tend.':'.$tstart; + } } sub get_course_adv_roles { @@ -1813,6 +1847,15 @@ sub courseiddump { } # ---------------------------------------------------------- DC e-mail + +sub dcmailput { + my ($domain,$msgid,$contents,$server)=@_; + my $status = &Apache::lonnet::critical( + 'dcmailput:'.$domain.':'.&Apache::lonnet::escape($msgid).'='. + &Apache::lonnet::escape($$contents{$server}),$server); + return $status; +} + sub dcmaildump { my ($dom,$startdate,$enddate,$senders) = @_; my %returnhash=(); @@ -1822,8 +1865,8 @@ sub dcmaildump { foreach ( split(/\&/,&reply('dcmaildump:'.$dom.':'. &escape($startdate).':'.&escape($enddate).':'. - &escape($senders), ,$tryserver))) { - my($key,$value) = split(/\=/,$_); + &escape($senders), $tryserver))) { + my ($key,$value) = split(/\=/,$_); if (($key) && ($value)) { $returnhash{$tryserver}{&unescape($key)} = &unescape($value); } @@ -1832,6 +1875,34 @@ sub dcmaildump { } return %returnhash; } +# ---------------------------------------------------------- Domain roles + +sub get_domain_roles { + my ($dom,$roles,$startdate,$enddate)=@_; + if (undef($startdate) || $startdate eq '') { + $startdate = '.'; + } + if (undef($enddate) || $enddate eq '') { + $enddate = '.'; + } + my $rolelist = join(':',@{$roles}); + my %personnel = (); + foreach my $tryserver (keys(%libserv)) { + if ($hostdom{$tryserver} eq $dom) { + %{$personnel{$tryserver}}=(); + foreach ( + split(/\&/,&reply('domrolesdump:'.$dom.':'. + &escape($startdate).':'.&escape($enddate).':'. + &escape($rolelist), $tryserver))) { + my($key,$value) = split(/\=/,$_); + if (($key) && ($value)) { + $personnel{$tryserver}{&unescape($key)} = &unescape($value); + } + } + } + } + return %personnel; +} # ----------------------------------------------------------- Check out an item @@ -2507,7 +2578,6 @@ sub rolesinit { if ($_!~/^rolesdef_/) { my ($area,$role)=split(/=/,$_); $area=~s/\_\w\w$//; - my ($trole,$tend,$tstart); if ($role=~/^cr/) { if ($role=~m|^(cr/\w+/\w+/[a-zA-Z0-9]+)_(.*)$|) { @@ -2531,7 +2601,7 @@ sub rolesinit { &standard_roleprivs(\%allroles,$trole,$tdomain,$spec,$trest,$area); } } - } + } } my ($author,$adv) = &set_userprivs(\$userroles,\%allroles); $userroles.='user.adv='.$adv."\n".