--- loncom/lonnet/perl/lonnet.pm 2009/08/11 11:33:52 1.1014 +++ loncom/lonnet/perl/lonnet.pm 2009/08/16 21:49:32 1.1018 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1014 2009/08/11 11:33:52 droeschl Exp $ +# $Id: lonnet.pm,v 1.1018 2009/08/16 21:49:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3146,10 +3146,10 @@ sub dcmaildump { sub get_domain_roles { my ($dom,$roles,$startdate,$enddate)=@_; - if (undef($startdate) || $startdate eq '') { + if ((!defined($startdate)) || ($startdate eq '')) { $startdate = '.'; } - if (undef($enddate) || $enddate eq '') { + if ((!defined($enddate)) || ($enddate eq '')) { $enddate = '.'; } my $rolelist; @@ -6102,7 +6102,17 @@ sub assignrole { if ($refused) { if (($selfenroll == 1) && ($role eq 'st') && ($udom eq $env{'user.domain'}) && ($uname eq $env{'user.name'})) { $refused = ''; - } else { + } elsif ($context eq 'requestcourses') { + if (($role eq 'cc') && ($env{'user.name'} ne '' && $env{'user.domain'} ne '')) { + my ($cdom,$cnum) = ($cwosec =~ m{^/($match_domain)/($match_courseid)$}); + my %crsenv = &userenvironment($cdom,$cnum,('internal.courseowner')); + if ($crsenv{'internal.courseowner'} eq + $env{'user.name'}.':'.$env{'user.domain'}) { + $refused = ''; + } + } + } + if ($refused) { &logthis('Refused assignrole: '.$udom.' '.$uname.' '.$url. ' '.$role.' '.$end.' '.$start.' by '. $env{'user.name'}.' at '.$env{'user.domain'}); @@ -6426,11 +6436,17 @@ sub writecoursepref { sub createcourse { my ($udom,$description,$url,$course_server,$nonstandard,$inst_code, - $course_owner,$crstype,$cnum)=@_; + $course_owner,$crstype,$cnum,$context,$category)=@_; $url=&declutter($url); my $cid=''; unless (&allowed('ccc',$udom)) { - return 'refused'; + if ($context eq 'requestcourses') { + unless (&usertools_access($course_owner,$udom,$category,undef,$context)) { + return 'refused'; + } + } else { + return 'refused'; + } } # --------------------------------------------------------------- Get Unique ID my $uname; @@ -6529,13 +6545,16 @@ sub is_course { return 0; } -sub store_coursereq { - my ($requestkey,$storehash) = @_; +sub store_userdata { + my ($storehash,$datakey,$namespace,$udom,$uname) = @_; my $result; - if ($requestkey =~ /^($match_domain)_($match_courseid)$/) { + if ($datakey ne '') { if (ref($storehash) eq 'HASH') { - my $namespace = 'courserequests'; - my $uhome=&homeserver(); + if ($udom eq '' || $uname eq '') { + $udom = $env{'user.domain'}; + $uname = $env{'user.name'}; + } + my $uhome=&homeserver($uname,$udom); if (($uhome eq '') || ($uhome eq 'no_host')) { $result = 'error: no_host'; } else { @@ -6548,7 +6567,7 @@ sub store_coursereq { } $namevalue=~s/\&$//; $result = &reply("store:$env{'user.domain'}:$env{'user.name'}:". - "$namespace:$requestkey:$namevalue",$uhome); + "$namespace:$datakey:$namevalue",$uhome); } } else { $result = 'error: data to store was not a hash reference';