--- loncom/interface/loncommon.pm 2004/11/12 23:29:56 1.230 +++ loncom/interface/loncommon.pm 2004/12/02 21:30:16 1.240 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.230 2004/11/12 23:29:56 raeburn Exp $ +# $Id: loncommon.pm,v 1.240 2004/12/02 21:30:16 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -375,12 +375,11 @@ sub selectstudent_link { } sub coursebrowser_javascript { - my ($domainfilter,$roleelement)=@_; + my ($domainfilter)=@_; return (< - var extra_element = "$roleelement" var stdeditbrowser; - function opencrsbrowser(formname,uname,udom,desc) { + function opencrsbrowser(formname,uname,udom,desc,extra_element) { var url = '/adm/pickcourse?'; var filter; if (filter != null) { @@ -397,8 +396,11 @@ sub coursebrowser_javascript { url += 'form=' + formname + '&cnumelement='+uname+ '&cdomelement='+udom+ '&cnameelement='+desc; - if (extra_element != '') { - url += '&roleelement=$roleelement'; + if (extra_element !=null && extra_element != '' && formname == 'rolechoice') { + url += '&roleelement='+extra_element; + if (domainfilter == null || domainfilter == '') { + url += '&domainfilter='+extra_element; + } } var title = 'Course_Browser'; var options = 'scrollbars=1,resizable=1,menubar=0'; @@ -411,9 +413,9 @@ ENDSTDBRW } sub selectcourse_link { - my ($form,$unameele,$udomele,$desc)=@_; + my ($form,$unameele,$udomele,$desc,$extra_element)=@_; return "".&mt('Select Course').""; + '","'.$udomele.'","'.$desc.'","'.$extra_element.'");'."'>".&mt('Select Course').""; } =pod @@ -2283,7 +2285,7 @@ sub get_student_view { if (defined($moreenv)) { %form=(%form,%{$moreenv}); } - if ($target eq 'tex') {$form{'grade_target'} = 'tex';} + if (defined($target)) { $form{'grade_target'} = $target; } $feedurl=&Apache::lonnet::clutter($feedurl); my $userview=&Apache::lonnet::ssi_body($feedurl,%form); $userview=~s/\]*\>//gi; @@ -2560,7 +2562,7 @@ sub bodytag { if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } # construct main body tag my $bodytag = < + @@ -2581,7 +2583,6 @@ END # No Remote my $roleinfo=(< -

$ENV{'environment.firstname'} $ENV{'environment.middlename'} @@ -2592,34 +2593,47 @@ END $role 
$realm  -

ENDROLE my $titleinfo = ''.$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') - .&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; } - } + unless ($customtitle) { #this is for resources; directories have customtitle, and crumbs and select recent are created in lonpubdir.pm + my $parentpath = ''; + if ($thisdisfn =~ m-(.+/)[^/]*$-) { + $parentpath = $1; + } + $titleinfo = &Apache::loncommon::help_open_menu('','','','',3,'Authoring'). + 'Construction Space: '. + '
' + .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."
" + .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') + .'
' + .&Apache::lonmenu::constspaceform(); - &Apache::lonnet::logthis("hrrm"); - return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', - $forcereg). - ''.$roleinfo.'
'.$titleinfo.'
'; + } + $forcereg=1; + } + my $titletable = ''. + ''.$roleinfo.'
'. + $titleinfo.'
'; + if ($ENV{'request.state'} eq 'construct') { + $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg,$titletable); + } else { + $bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg). + $titletable; + } + return $bodytag; } # @@ -2686,6 +2700,61 @@ 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) = @_; + if (!($cdom && $cnum)) { return 0; } + my $cid = $cdom.'_'.$cnum; + my $numsections = 0; + + 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 '-1' || $section =~ /^\s*$/) { + if (!defined($$sectioncount{$section})) { $numsections++; } + $$sectioncount{$section}++; + } + } + } + my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + foreach my $user (sort(keys(%courseroles))) { + if ($user !~ /^(\w{2})/) { next; } + my ($role) = ($user =~ /^(\w{2})/); + if ($possible_roles && !(grep(/^$role$/,@$possible_roles))) { next; } + my $section; + if ($role eq 'cr' && + $user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) { + $section=$1; + } + if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { $section=$1; } + if (!defined($section) || $section eq '-1') { next; } + if (!defined($$sectioncount{$section})) { $numsections++; } + $$sectioncount{$section}++; + } + return $numsections; +} + + sub get_posted_cgi { my $r=shift; @@ -3292,6 +3361,9 @@ they are plotted. If undefined, default =item @Values: An array of array references. Each array reference holds data to be plotted in a stacked bar chart. +=item If the final element of @Values is a hash reference the key/value +pairs will be added to the graph definition. + =back Returns: @@ -3803,7 +3875,7 @@ sub escape_double { # Escapes the last element of a full URL. sub escape_url { my ($url) = @_; - my @urlslices = split(/\//, $url); + my @urlslices = split(/\//, $url,-1); my $lastitem = &Apache::lonnet::escape(pop(@urlslices)); return join('/',@urlslices).'/'.$lastitem; }