--- loncom/interface/loncommon.pm 2004/11/23 07:29:24 1.234
+++ loncom/interface/loncommon.pm 2004/12/08 00:56:00 1.242
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.234 2004/11/23 07:29:24 raeburn Exp $
+# $Id: loncommon.pm,v 1.242 2004/12/08 00:56:00 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2285,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;
@@ -2325,7 +2325,7 @@ sub get_student_answers {
=item * &submlink()
-Inputs: $text $uname $udom $symb
+Inputs: $text $uname $udom $symb $target
Returns: A link to grades.pm such as to see the SUBM view of a student
@@ -2333,15 +2333,64 @@ Returns: A link to grades.pm such as to
###############################################
sub submlink {
- my ($text,$uname,$udom,$symb)=@_;
+ my ($text,$uname,$udom,$symb,$target)=@_;
if (!($uname && $udom)) {
(my $cursymb, my $courseid,$udom,$uname)=
&Apache::lonxml::whichuser($symb);
if (!$symb) { $symb=$cursymb; }
}
if (!$symb) { $symb=&symbread(); }
- return ''.$text.'';
+ $symb=&Apache::lonnet::escape($symb);
+ if ($target) { $target="target=\"$target\""; }
+ return ''.$text.'';
+}
+##############################################
+
+=pod
+
+=item * &pgrdlink()
+
+Inputs: $text $uname $udom $symb $target
+
+Returns: A link to grades.pm such as to see the PGRD view of a student
+
+=cut
+
+###############################################
+sub pgrdlink {
+ my $link=&submlink(@_);
+ $link=~s/(&command=submission)/$1&showgrading=yes/;
+ return $link;
+}
+##############################################
+
+=pod
+
+=item * &pprmlink()
+
+Inputs: $text $uname $udom $symb $target
+
+Returns: A link to parmset.pm such as to see the PPRM view of a
+student andn resource
+
+=cut
+
+###############################################
+sub pprmlink {
+ my ($text,$uname,$udom,$symb,$target)=@_;
+ if (!($uname && $udom)) {
+ (my $cursymb, my $courseid,$udom,$uname)=
+ &Apache::lonxml::whichuser($symb);
+ if (!$symb) { $symb=$cursymb; }
+ }
+ if (!$symb) { $symb=&symbread(); }
+ $symb=&Apache::lonnet::escape($symb);
+ if ($target) { $target="target=\"$target\""; }
+ return ''.$text.'';
}
##############################################
@@ -2599,26 +2648,45 @@ ENDROLE
$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::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 = '';
+ my $lastitem = '';
+ if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
+ $parentpath = $1;
+ $lastitem = $2;
+ } else {
+ $lastitem = $thisdisfn;
+ }
+ $titleinfo = &Apache::loncommon::help_open_menu('','','','',3,'Authoring').
+ 'Construction Space: '.
+ ''
+ .&Apache::lonmenu::constspaceform();
- return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',
- $forcereg).
- ''.$titleinfo.' | '.$roleinfo.'
';
+ }
+ $forcereg=1;
+ }
+ my $titletable = ''.
+ ''.
+ $titleinfo.' | '.$roleinfo.'
';
+ 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;
}
#
@@ -2704,52 +2772,37 @@ Returns number of sections.
###############################################
sub get_sections {
my ($cdom,$cnum,$sectioncount,$possible_roles) = @_;
+ if (!($cdom && $cnum)) { return 0; }
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} ++;
- }
- }
- }
- }
- }
+
+ 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;
}
@@ -3361,6 +3414,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:
@@ -3872,7 +3928,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;
}