--- loncom/interface/lonhelper.pm 2012/10/29 17:38:56 1.189
+++ loncom/interface/lonhelper.pm 2015/08/16 00:21:21 1.196
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# .helper XML handler to implement the LON-CAPA helper
#
-# $Id: lonhelper.pm,v 1.189 2012/10/29 17:38:56 raeburn Exp $
+# $Id: lonhelper.pm,v 1.196 2015/08/16 00:21:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -64,9 +64,11 @@ messages, resource selections, or date q
The helper tag is required to have one attribute, "title", which is the name
of the helper itself, such as "Parameter helper". The helper tag may optionally
-have a "requiredpriv" attribute, specifying the priviledge a user must have
+have a "requiredpriv" attribute, specifying the privilege a user must have
to use the helper, or get denied access. See loncom/auth/rolesplain.tab for
-useful privs. Default is full access, which is often wrong!
+useful privs. You may add the modifier &S at the end of the three letter priv
+if you want to grant access to users for whom the corresponding privilege is
+section-specific. The default is full access, which is often wrong!
=head2 State tags
@@ -283,7 +285,8 @@ sub real_handler {
my $allowed = $helper->allowedCheck();
if (!$allowed) {
- $env{'user.error.msg'} = $env{'request.uri'}.':'.$helper->{REQUIRED_PRIV}.
+ my ($priv,$modifier) = split(/\&/,$helper->{REQUIRED_PRIV});
+ $env{'user.error.msg'} = $env{'request.uri'}.':'.$priv.
":0:0:Permission denied to access this helper.";
return HTTP_NOT_ACCEPTABLE;
}
@@ -508,8 +511,13 @@ sub allowedCheck {
if (!defined($self->{REQUIRED_PRIV})) {
return 1;
}
-
- return Apache::lonnet::allowed($self->{REQUIRED_PRIV}, $env{'request.course.id'});
+ my ($priv,$modifier) = split(/\&/,$self->{REQUIRED_PRIV});
+ my $allowed = &Apache::lonnet::allowed($priv,$env{'request.course.id'});
+ if ((!$allowed) && ($modifier eq 'S') && ($env{'request.course.sec'} ne '')) {
+ $allowed = &Apache::lonnet::allowed($priv,$env{'request.course.id'}.'/'.
+ $env{'request.course.sec'});
+ }
+ return $allowed;
}
sub changeState {
@@ -651,7 +659,7 @@ sub display {
$result .= $buttons;
- #foreach my $key (keys %{$self->{VARS}}) {
+ #foreach my $key (keys(%{$self->{VARS}})) {
# $result .= "|$key| -> " . $self->{VARS}->{$key} . " ";
#}
@@ -2396,7 +2404,7 @@ BUTTONS
$result .= "
$text
";
}
}
- $result .= "
Select
";
+ $result .= '
'.&Apache::lonlocal::mt('Select').'
';
$result .= "
"; # Close off the extra row and start a new one.
$headings_done = 1;
}
@@ -2493,9 +2501,9 @@ BUTTONS
&HTML::Entities::encode(&$valueFunc($resource),"<>&\"'");
if ($addparts && (scalar(@{$resource->parts}) > 1)) {
$col .= "";
}
@@ -2540,7 +2548,8 @@ RADIO
'closeAllPages' => $self->{'closeallpages'},
'suppressEmptySequences' => $self->{'suppressEmptySequences'},
'include_top_level_map' => $self->{'include_top_level_map'},
- 'iterator_map' => $mapUrl }
+ 'iterator_map' => $mapUrl,
+ 'map_no_edit_link' => 1, }
);
$result .= $buttons;
@@ -2612,6 +2621,12 @@ selection. Defaults to false.
If true, only active students and course personnel will be
shown. Defaults to false.
+=item * B:
+
+If true, and user's role is in a specific section, only course personnel
+will be shown if they also have a section-specific role in the same section.
+Defaults to false.
+
=item * B:
If true, the selection of no users is allowed. Defaults to false.
@@ -2647,6 +2662,7 @@ sub start_student {
$helper->declareVar($paramHash->{'variable'});
$paramHash->{'multichoice'} = $token->[2]{'multichoice'};
$paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'};
+ $paramHash->{'sectiononly'} = $token->[2]{'sectiononly'};
$paramHash->{'activeonly'} = $token->[2]{'activeonly'};
if (defined($token->[2]{'nextstate'})) {
$paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
@@ -2688,14 +2704,17 @@ sub render {
delete($defaultUsers{''});
}
+ my $personnel_section;
+ if ($self->{'sectiononly'}) {
+ $personnel_section = $env{'request.course.sec'};
+ }
my ($course_personnel,
$current_members,
$expired_members,
$future_members) =
- &Apache::lonselstudent::get_people_in_class($env{'request.course.sec'});
-
-
+ &Apache::lonselstudent::get_people_in_class($env{'request.course.sec'},
+ $personnel_section);
# Load up the non-students, if necessary
@@ -2703,26 +2722,44 @@ sub render {
unshift @$current_members, (@$course_personnel);
}
+ my %titles = &Apache::lonlocal::texthash(
+ 'active' => 'Select Currently Enrolled Students and Active Course Personnel',
+ 'future' => 'Select Future Enrolled Students',
+ 'expired' => 'Select Previously Enrolled Students',
+ );
+
+ if ($env{'request.course.sec'}) {
+ if ($self->{'sectiononly'}) {
+ $titles{'active'} = &mt('Select Currently Enrolled Students and Active Course Personnel in Section: [_1]',
+ $env{'request.course.sec'});
+ } else {
+ $titles{'active'} = &mt('Select Currently Enrolled Students in Section: [_1], and Active Course Personnel',
+ $env{'request.course.sec'});
+ }
+ $titles{'future'} = &mt('Select Future Enrolled Students in Section: [_1]',
+ $env{'request.course.sec'});
+ $titles{'expired'} = &mt('Select Previously Enrolled Students in Section: [_1]',
+ $env{'request.course.sec'});
+ }
- # Current personel
+ # Current personnel
- $result .= '
'.&mt('Select Currently Enrolled Students and Active Course Personnel').'
';
+ $result .= '
'.$titles{'active'}.'
';
$result .= &Apache::lonselstudent::render_student_list( $current_members,
"helpform",
- "current",
+ "current",
\%defaultUsers,
$self->{'multichoice'},
$self->{'variable'},
1);
-
# If activeonly is not set then we can also give the expired students:
#
if (!$self->{'activeonly'} && ((scalar(@$future_members)) > 0)) {
# And future.
- $result .= '
'.&mt('Select Future Enrolled Students and Future Course Personnel').'
';
+ $result .= '
'.$titles{'future'}.'
';
$result .= &Apache::lonselstudent::render_student_list( $future_members,
"helpform",
@@ -2735,7 +2772,7 @@ sub render {
if (!$self->{'activeonly'} && ((scalar(@$expired_members)) > 0)) {
# Past
- $result .= '
'.&mt('Select Previously Enrolled Students and Inactive Course Personnel').'
';
+ $result .= '
'.$titles{'expired'}.'
';
$result .= &Apache::lonselstudent::render_student_list($expired_members,
"helpform",
"past",
@@ -3184,22 +3221,27 @@ sub start_section {
# Populate the CHOICES element
my %choices;
+ my $usersec = $Apache::lonnet::env{'request.course.sec'};
- my $section = Apache::loncoursedata::CL_SECTION();
- my $classlist = Apache::loncoursedata::get_classlist();
- foreach my $user (keys(%$classlist)) {
- my $section_name = $classlist->{$user}[$section];
- if (!$section_name) {
- $choices{"No section assigned"} = "";
- } else {
- $choices{$section_name} = $section_name;
+ if ($usersec ne '') {
+ $choices{$usersec} = $usersec;
+ } else {
+ my $section = Apache::loncoursedata::CL_SECTION();
+ my $classlist = Apache::loncoursedata::get_classlist();
+ foreach my $user (keys(%$classlist)) {
+ my $section_name = $classlist->{$user}[$section];
+ if (!$section_name) {
+ $choices{"No section assigned"} = "";
+ } else {
+ $choices{$section_name} = $section_name;
+ }
+ }
+
+ if (exists($choices{"No section assigned"})) {
+ push(@{$paramHash->{CHOICES}},
+ ['No section assigned','No section assigned']);
+ delete($choices{"No section assigned"});
}
- }
-
- if (exists($choices{"No section assigned"})) {
- push(@{$paramHash->{CHOICES}},
- ['No section assigned','No section assigned']);
- delete($choices{"No section assigned"});
}
for my $section_name (sort {lc($a) cmp lc($b) } (keys(%choices))) {
push @{$paramHash->{CHOICES}}, [$section_name, $section_name];
@@ -3633,7 +3675,7 @@ sub render {
my @results;
# Collect all the results
- for my $stateName (keys %{$helper->{STATES}}) {
+ for my $stateName (keys(%{$helper->{STATES}})) {
my $state = $helper->{STATES}->{$stateName};
for my $element (@{$state->{ELEMENTS}}) {