--- loncom/interface/loncommon.pm 2005/11/15 20:46:40 1.293 +++ loncom/interface/loncommon.pm 2005/11/17 22:59:00 1.296 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.293 2005/11/15 20:46:40 raeburn Exp $ +# $Id: loncommon.pm,v 1.296 2005/11/17 22:59:00 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1920,12 +1920,11 @@ if $first is set to 'lastname' then it r =cut + ############################################################### sub plainname { my ($uname,$udom,$first)=@_; - my %names=&Apache::lonnet::get('environment', - ['firstname','middlename','lastname','generation'], - $udom,$uname); + my %names=&getnames($uname,$udom); my $name=&Apache::lonnet::format_name($names{'firstname'}, $names{'middlename'}, $names{'lastname'}, @@ -1956,19 +1955,7 @@ if the user does not sub nickname { my ($uname,$udom)=@_; - my %names; - if ($uname eq $env{'user.name'} && - $udom eq $env{'user.domain'}) { - %names=('nickname' => $env{'environment.nickname'} , - 'firstname' => $env{'environment.firstname'} , - 'middlename' => $env{'environment.middlename'}, - 'lastname' => $env{'environment.lastname'} , - 'generation' => $env{'environment.generation'}); - } else { - %names=&Apache::lonnet::get('environment', - ['nickname','firstname','middlename', - 'lastname','generation'],$udom,$uname); - } + my %names=&getnames($uname,$udom); my $name=$names{'nickname'}; if ($name) { $name='"'.$name.'"'; @@ -1981,6 +1968,20 @@ sub nickname { return $name; } +sub getnames { + my ($uname,$udom)=@_; + my $id=$uname.':'.$udom; + my ($names,$cached)=&Apache::lonnet::is_cached_new('namescache',$id); + if ($cached) { + return %{$names}; + } else { + my %loadnames=&Apache::lonnet::get('environment', + ['firstname','middlename','lastname','generation','nickname'], + $udom,$uname); + &Apache::lonnet::do_cache_new('namescache',$id,\%loadnames); + return %loadnames; + } +} # ------------------------------------------------------------------ Screenname @@ -2889,7 +2890,7 @@ ENDROLE # return(< + @@ -3083,6 +3084,83 @@ sub get_sections { } ############################################### + +=pod + +=item get_group_settings + +Uses TokeParser to extract group information from the +XML used to describe course groups. + +Input: +Scalar containing XML (as retrieved from &lonnet::get_coursegroups). + +Output: +Hash containing group information as key=values for (a), and +hash of hashes for (b) + +Keys (in two categories): +(a) groupname, creator, creation, modified, startdate,enddate. +Corresponding values are name of the group, creator of the group +(username:domain), UNIX time for date group was created, and +settings were last modified, and default start and end access +times for group members. + +(b) functions returned in hash of hashes. +Outer hash key is functions. +Inner hash keys are chat,discussion,email,files,homepage,roster. +Corresponding values are either on or off, depending on +whther this type of functionality is available for the group. + +=cut + +############################################### + +sub get_group_settings { + my ($groupinfo)=@_; + my $parser=HTML::TokeParser->new(\$groupinfo); + my $token; + my $tool = ''; + my %content=(); + while ($token=$parser->get_token) { + if ($token->[0] eq 'S') { + my $entry=$token->[1]; + if ($entry eq 'functions') { + %{$content{$entry}} = (); + $tool = $entry; + } else { + my $value=$parser->get_text('/'.$entry); + if ($entry eq 'name') { + if ($tool eq 'functions') { + my $function = $token->[2]{id}; + $content{$tool}{$function} = $value; + } + } elsif ($entry eq 'groupname') { + $content{$entry}=&Apache::lonnet::unescape($value); + } else { + $content{$entry}=$value; + } + } + } elsif ($token->[0] eq 'E') { + if ($token->[1] eq 'functions') { + $tool = ''; + } + } + } + return %content; +} + +sub check_group_access { + my ($group) = @_; + my $access = 1; + my $now = time; + my ($start,$end) = split(/\./,$env{'user.role.gr/'.$env{'request.course,id'}.'/'.$group}); + if (($end!=0) && ($end<$now)) { $access = 0; } + if (($start!=0) && ($start>$now)) { $access=0; } + return $access; +} + +############################################### =pod
$upperleft $messages