--- loncom/interface/loncommon.pm 2004/11/09 19:51:43 1.228 +++ loncom/interface/loncommon.pm 2004/11/21 04:24:49 1.233 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.228 2004/11/09 19:51:43 matthew Exp $ +# $Id: loncommon.pm,v 1.233 2004/11/21 04:24:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -375,9 +375,10 @@ sub selectstudent_link { } sub coursebrowser_javascript { - my ($domainfilter)=@_; + my ($domainfilter,$roleelement)=@_; return (< + var extra_element = "$roleelement" var stdeditbrowser; function opencrsbrowser(formname,uname,udom,desc) { var url = '/adm/pickcourse?'; @@ -396,6 +397,9 @@ sub coursebrowser_javascript { url += 'form=' + formname + '&cnumelement='+uname+ '&cdomelement='+udom+ '&cnameelement='+desc; + if (extra_element != '') { + url += '&roleelement=$roleelement'; + } var title = 'Course_Browser'; var options = 'scrollbars=1,resizable=1,menubar=0'; options += ',width=700,height=600'; @@ -2556,7 +2560,7 @@ sub bodytag { if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } # construct main body tag my $bodytag = < + @@ -2577,7 +2581,6 @@ END # No Remote my $roleinfo=(< -

$ENV{'environment.firstname'} $ENV{'environment.middlename'} @@ -2588,14 +2591,29 @@ END $role 
$realm  -

ENDROLE my $titleinfo = ''.$title.''; + $font.'">'.$title.''; if ($customtitle) { $titleinfo = $customtitle; } + if ($ENV{'request.state'} eq 'construct') { + my ($uname,$thisdisfn)= + ($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); + my $formaction='/priv/'.$uname.'/'.$thisdisfn; + $formaction=~s/\/+/\//g; + $titleinfo = '
' + .&Apache::lonhtmlcommon::crumbs($uname.'/'.$thisdisfn,'_top','/priv','',-1,1)."
" + .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') + .'
' + .&Apache::lonmenu::constspaceform(); + + &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction); + if ($thisdisfn!~m|/$|) { $forcereg=1; } + } + return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', $forcereg). ''.$roleinfo.'
'.$titleinfo.'
'; @@ -2665,6 +2683,76 @@ sub get_users_function { ############################################### +=pod + +=item get_sections + +Determines all the sections for a course including +sections with students and sections containing other roles. +Incoming parameters: domain, course number, reference to +section hash (keys to be section/group IDs), reference to +array containing roles for which sections should be gathered +(optional). If the fourth argument is undefined, sections +are gathered for any role. + +Returns number of sections. + +=cut + +############################################### +sub get_sections { + my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; + my $cid = $cdom.'_'.$cnum; + my $numsections = 0; + if ($cdom && $cnum) { + if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { + my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum); + my $sec_index = &Apache::loncoursedata::CL_SECTION(); + my $status_index = &Apache::loncoursedata::CL_STATUS(); + while (my ($student,$data) = each %$classlist) { + my ($section,$status) = ($data->[$sec_index], + $data->[$status_index]); + unless ($section eq '' || $section =~ /^\s*$/) { + if (!defined($$sectioncount{$section})) { + $$sectioncount{$section} = 1; + $numsections ++; + } else { + $$sectioncount{$section} ++; + } + } + } + } + my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + foreach my $user (sort keys %courseroles) { + if ($user =~ /^(\w{2})/) { + my $role = $1; + if (!defined($possible_roles) || (grep/^$role$/,@$possible_roles)) { + if ($role eq 'cr') { + if ($user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) { + if (!defined($$sectioncount{$1})) { + $$sectioncount{$1} = 1; + $numsections ++; + } else { + $$sectioncount{$1} ++; + } + } + } + if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { + if (!defined($$sectioncount{$1})) { + $$sectioncount{$1} = 1; + $numsections ++; + } else { + $$sectioncount{$1} ++; + } + } + } + } + } + } + return $numsections; +} + + sub get_posted_cgi { my $r=shift;