--- loncom/interface/loncommon.pm 2004/11/02 20:48:02 1.226 +++ 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.226 2004/11/02 20:48:02 albertel 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'; @@ -662,6 +666,7 @@ sub help_open_menu { my $link=''; my $title = &mt('Get help'); my $origurl = $ENV{'REQUEST_URI'}; + $origurl=~s|^/~|/priv/|; my $timestamp = time; foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { $$_ = &Apache::lonnet::escape($$_); @@ -2555,7 +2560,7 @@ sub bodytag { if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } # construct main body tag my $bodytag = < + @@ -2576,7 +2581,6 @@ END # No Remote my $roleinfo=(< -

$ENV{'environment.firstname'} $ENV{'environment.middlename'} @@ -2587,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.'
'; @@ -2664,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; @@ -3290,6 +3379,10 @@ sub DrawBarGraph { '#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66', ]; } + my $extra_settings = {}; + if (ref($Values[-1]) eq 'HASH') { + $extra_settings = pop(@Values); + } # my $identifier = &get_cgi_id(); my $id = 'cgi.'.$identifier; @@ -3365,6 +3458,11 @@ sub DrawBarGraph { $ValuesHash{$id.'.bar_width'} = $bar_width; $ValuesHash{$id.'.labels'} = join(',',@Labels); # + # Deal with other parameters + while (my ($key,$value) = each(%$extra_settings)) { + $ValuesHash{$id.'.'.$key} = $value; + } + # &Apache::lonnet::appenv(%ValuesHash); return ''; }