version 1.191, 2014/02/11 19:11:24
|
version 1.199, 2018/01/14 22:02:06
|
Line 64 messages, resource selections, or date q
|
Line 64 messages, resource selections, or date q
|
|
|
The helper tag is required to have one attribute, "title", which is the name |
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 |
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 |
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 |
=head2 State tags |
|
|
Line 283 sub real_handler {
|
Line 285 sub real_handler {
|
|
|
my $allowed = $helper->allowedCheck(); |
my $allowed = $helper->allowedCheck(); |
if (!$allowed) { |
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."; |
":0:0:Permission denied to access this helper."; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
Line 508 sub allowedCheck {
|
Line 511 sub allowedCheck {
|
if (!defined($self->{REQUIRED_PRIV})) { |
if (!defined($self->{REQUIRED_PRIV})) { |
return 1; |
return 1; |
} |
} |
|
my ($priv,$modifier) = split(/\&/,$self->{REQUIRED_PRIV}); |
return Apache::lonnet::allowed($self->{REQUIRED_PRIV}, $env{'request.course.id'}); |
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 { |
sub changeState { |
Line 651 sub display {
|
Line 659 sub display {
|
$result .= $buttons; |
$result .= $buttons; |
|
|
|
|
#foreach my $key (keys %{$self->{VARS}}) { |
#foreach my $key (keys(%{$self->{VARS}})) { |
# $result .= "|$key| -> " . $self->{VARS}->{$key} . "<br />"; |
# $result .= "|$key| -> " . $self->{VARS}->{$key} . "<br />"; |
#} |
#} |
|
|
Line 2396 BUTTONS
|
Line 2404 BUTTONS
|
$result .= "<th>$text</th>"; |
$result .= "<th>$text</th>"; |
} |
} |
} |
} |
$result .= '<th>'.&mt('Select').'</th>'; |
$result .= '<th>'.&Apache::lonlocal::mt('Select').'</th>'; |
$result .= "</tr><tr>"; # Close off the extra row and start a new one. |
$result .= "</tr><tr>"; # Close off the extra row and start a new one. |
$headings_done = 1; |
$headings_done = 1; |
} |
} |
Line 2456 BUTTONS
|
Line 2464 BUTTONS
|
$resource_name . "'/> </td>"; |
$resource_name . "'/> </td>"; |
} else { |
} else { |
$col .= |
$col .= |
"<td align='center'><input type=$option_type name ='$option_var". |
"<td align='center'><input type='$option_type' name ='$option_var". |
"_forminput' value='". |
"_forminput' value='". |
$resource_name . "' $checked /> </td>"; |
$resource_name . "' $checked /> </td>"; |
} |
} |
Line 2493 BUTTONS
|
Line 2501 BUTTONS
|
&HTML::Entities::encode(&$valueFunc($resource),"<>&\"'"); |
&HTML::Entities::encode(&$valueFunc($resource),"<>&\"'"); |
if ($addparts && (scalar(@{$resource->parts}) > 1)) { |
if ($addparts && (scalar(@{$resource->parts}) > 1)) { |
$col .= "<select onclick=\"javascript:updateRadio(this.form,'${var}_forminput','$resource_name');updateHidden(this.form,'$id','${var}');\" name='part_${id}_forminput'>\n"; |
$col .= "<select onclick=\"javascript:updateRadio(this.form,'${var}_forminput','$resource_name');updateHidden(this.form,'$id','${var}');\" name='part_${id}_forminput'>\n"; |
$col .= "<option value=\"$part\">'.&mt('All Parts').'</option>\n"; |
$col .= "<option value=\"$part\">".&Apache::lonlocal::mt('All Parts')."</option>\n"; |
foreach my $part (@{$resource->parts}) { |
foreach my $part (@{$resource->parts}) { |
$col .= "<option value=\"$part\">".&mt('Part: [_1]',$part)."</option>\n"; |
$col .= "<option value=\"$part\">".&Apache::lonlocal::mt('Part: [_1]',$part)."</option>\n"; |
} |
} |
$col .= "</select>"; |
$col .= "</select>"; |
} |
} |
Line 2613 selection. Defaults to false.
|
Line 2621 selection. Defaults to false.
|
If true, only active students and course personnel will be |
If true, only active students and course personnel will be |
shown. Defaults to false. |
shown. Defaults to false. |
|
|
|
=item * B<sectiononly>: |
|
|
|
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<emptyallowed>: |
=item * B<emptyallowed>: |
|
|
If true, the selection of no users is allowed. Defaults to false. |
If true, the selection of no users is allowed. Defaults to false. |
Line 2648 sub start_student {
|
Line 2662 sub start_student {
|
$helper->declareVar($paramHash->{'variable'}); |
$helper->declareVar($paramHash->{'variable'}); |
$paramHash->{'multichoice'} = $token->[2]{'multichoice'}; |
$paramHash->{'multichoice'} = $token->[2]{'multichoice'}; |
$paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'}; |
$paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'}; |
|
$paramHash->{'sectiononly'} = $token->[2]{'sectiononly'}; |
$paramHash->{'activeonly'} = $token->[2]{'activeonly'}; |
$paramHash->{'activeonly'} = $token->[2]{'activeonly'}; |
if (defined($token->[2]{'nextstate'})) { |
if (defined($token->[2]{'nextstate'})) { |
$paramHash->{NEXTSTATE} = $token->[2]{'nextstate'}; |
$paramHash->{NEXTSTATE} = $token->[2]{'nextstate'}; |
Line 2689 sub render {
|
Line 2704 sub render {
|
delete($defaultUsers{''}); |
delete($defaultUsers{''}); |
} |
} |
|
|
|
my $personnel_section; |
|
if ($self->{'sectiononly'}) { |
|
$personnel_section = $env{'request.course.sec'}; |
|
} |
|
|
my ($course_personnel, |
my ($course_personnel, |
$current_members, |
$current_members, |
$expired_members, |
$expired_members, |
$future_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 |
# Load up the non-students, if necessary |
|
|
Line 2704 sub render {
|
Line 2722 sub render {
|
unshift @$current_members, (@$course_personnel); |
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 .= '<h4>'.&mt('Select Currently Enrolled Students and Active Course Personnel').'</h4>'; |
$result .= '<h4>'.$titles{'active'}.'</h4>'; |
$result .= &Apache::lonselstudent::render_student_list( $current_members, |
$result .= &Apache::lonselstudent::render_student_list( $current_members, |
"helpform", |
"helpform", |
"current", |
"current", |
\%defaultUsers, |
\%defaultUsers, |
$self->{'multichoice'}, |
$self->{'multichoice'}, |
$self->{'variable'}, |
$self->{'variable'}, |
1); |
1); |
|
|
|
|
# If activeonly is not set then we can also give the expired students: |
# If activeonly is not set then we can also give the expired students: |
# |
# |
if (!$self->{'activeonly'} && ((scalar(@$future_members)) > 0)) { |
if (!$self->{'activeonly'} && ((scalar(@$future_members)) > 0)) { |
|
|
# And future. |
# And future. |
|
|
$result .= '<h4>'.&mt('Select Future Enrolled Students and Future Course Personnel').'</h4>'; |
$result .= '<h4>'.$titles{'future'}.'</h4>'; |
|
|
$result .= &Apache::lonselstudent::render_student_list( $future_members, |
$result .= &Apache::lonselstudent::render_student_list( $future_members, |
"helpform", |
"helpform", |
Line 2736 sub render {
|
Line 2772 sub render {
|
if (!$self->{'activeonly'} && ((scalar(@$expired_members)) > 0)) { |
if (!$self->{'activeonly'} && ((scalar(@$expired_members)) > 0)) { |
# Past |
# Past |
|
|
$result .= '<h4>'.&mt('Select Previously Enrolled Students and Inactive Course Personnel').'</h4>'; |
$result .= '<h4>'.$titles{'expired'}.'</h4>'; |
$result .= &Apache::lonselstudent::render_student_list($expired_members, |
$result .= &Apache::lonselstudent::render_student_list($expired_members, |
"helpform", |
"helpform", |
"past", |
"past", |
Line 3147 It takes the standard attributes "variab
|
Line 3183 It takes the standard attributes "variab
|
"allowempty" and "nextstate", meaning what they do for most other |
"allowempty" and "nextstate", meaning what they do for most other |
elements. |
elements. |
|
|
also takes a boolean 'onlysections' whcih will restrict this to only |
also takes a boolean 'onlysections' which will restrict this to only |
have sections and not include groups |
have sections and not include groups |
|
|
=cut |
=cut |
Line 3185 sub start_section {
|
Line 3221 sub start_section {
|
|
|
# Populate the CHOICES element |
# Populate the CHOICES element |
my %choices; |
my %choices; |
|
my $usersec = $Apache::lonnet::env{'request.course.sec'}; |
|
|
my $section = Apache::loncoursedata::CL_SECTION(); |
if ($usersec ne '') { |
my $classlist = Apache::loncoursedata::get_classlist(); |
$choices{$usersec} = $usersec; |
foreach my $user (keys(%$classlist)) { |
} else { |
my $section_name = $classlist->{$user}[$section]; |
my $section = Apache::loncoursedata::CL_SECTION(); |
if (!$section_name) { |
my $classlist = Apache::loncoursedata::get_classlist(); |
$choices{"No section assigned"} = ""; |
foreach my $user (keys(%$classlist)) { |
} else { |
my $section_name = $classlist->{$user}[$section]; |
$choices{$section_name} = $section_name; |
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))) { |
for my $section_name (sort {lc($a) cmp lc($b) } (keys(%choices))) { |
push @{$paramHash->{CHOICES}}, [$section_name, $section_name]; |
push @{$paramHash->{CHOICES}}, [$section_name, $section_name]; |
Line 3236 It takes the standard attributes "variab
|
Line 3277 It takes the standard attributes "variab
|
"allowempty" and "nextstate", meaning what they do for most other |
"allowempty" and "nextstate", meaning what they do for most other |
elements. |
elements. |
|
|
|
also takes a boolean grouponly, which if true, will restrict choice to |
|
groups in which user is a member, unless user has the mdg priv in the course, |
|
in which case all groups will be possible choices. Defaults to false. |
|
|
=cut |
=cut |
|
|
no strict; |
no strict; |
Line 3265 sub start_group {
|
Line 3310 sub start_group {
|
$helper->declareVar($paramHash->{'variable'}); |
$helper->declareVar($paramHash->{'variable'}); |
$paramHash->{'multichoice'} = $token->[2]{'multichoice'}; |
$paramHash->{'multichoice'} = $token->[2]{'multichoice'}; |
$paramHash->{'allowempty'} = $token->[2]{'allowempty'}; |
$paramHash->{'allowempty'} = $token->[2]{'allowempty'}; |
|
$paramHash->{'grouponly'} = $token->[2]{'grouponly'}; |
if (defined($token->[2]{'nextstate'})) { |
if (defined($token->[2]{'nextstate'})) { |
$paramHash->{NEXTSTATE} = $token->[2]{'nextstate'}; |
$paramHash->{NEXTSTATE} = $token->[2]{'nextstate'}; |
} |
} |
Line 3272 sub start_group {
|
Line 3318 sub start_group {
|
# Populate the CHOICES element |
# Populate the CHOICES element |
my %choices; |
my %choices; |
|
|
my %curr_groups = &Apache::longroup::coursegroups(); |
my %curr_groups; |
|
if ((!$paramHash->{'grouponly'}) || (&Apache::lonnet::allowed('mdg',$Apache::lonnet::env{'request.course.id'}))) { |
|
%curr_groups = &Apache::longroup::coursegroups(); |
|
} elsif ($Apache::lonnet::env{'request.course.groups'} ne '') { |
|
map { $curr_groups{$_} = 1; } split(/,/,$Apache::lonnet::env{'request.course.groups'}); |
|
} |
foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) { |
foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) { |
push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]); |
push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]); |
} |
} |
Line 3634 sub render {
|
Line 3685 sub render {
|
my @results; |
my @results; |
|
|
# Collect all the results |
# Collect all the results |
for my $stateName (keys %{$helper->{STATES}}) { |
for my $stateName (keys(%{$helper->{STATES}})) { |
my $state = $helper->{STATES}->{$stateName}; |
my $state = $helper->{STATES}->{$stateName}; |
|
|
for my $element (@{$state->{ELEMENTS}}) { |
for my $element (@{$state->{ELEMENTS}}) { |
Line 3775 sub render {
|
Line 3826 sub render {
|
if ($vars->{GRANULARITY} eq 'whole_course') { |
if ($vars->{GRANULARITY} eq 'whole_course') { |
$resourceString .= '<li>'.&mt('for [_1]all resources in the course[_2]','<b>','</b>').'</li>'; |
$resourceString .= '<li>'.&mt('for [_1]all resources in the course[_2]','<b>','</b>').'</li>'; |
if ($vars->{TARGETS} eq 'course') { |
if ($vars->{TARGETS} eq 'course') { |
$level = 14; # general course, see lonparmset.pm perldoc |
$level = 18; # general course, see lonparmset.pm perldoc |
} elsif ($vars->{TARGETS} eq 'section') { |
} elsif ($vars->{TARGETS} eq 'section') { |
$level = 9; |
$level = 12; |
} elsif ($vars->{TARGETS} eq 'group') { |
} elsif ($vars->{TARGETS} eq 'group') { |
$level = 6; |
$level = 8; |
} else { |
} else { |
$level = 3; |
$level = 4; |
} |
} |
$affectedResourceId = "0.0"; |
$affectedResourceId = "0.0"; |
$symb = 'a'; |
$symb = 'a'; |
$paramlevel = 'general'; |
$paramlevel = 'general'; |
} elsif ($vars->{GRANULARITY} eq 'map') { |
} elsif (($vars->{GRANULARITY} eq 'map') || ($vars->{GRANULARITY} eq 'maprecurse')) { |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
if (defined($navmap)) { |
if (defined($navmap)) { |
my $res = $navmap->getByMapPc($vars->{RESOURCE_ID}); |
my $res = $navmap->getByMapPc($vars->{RESOURCE_ID}); |
my $title = $res->compTitle(); |
my $title = $res->compTitle(); |
$symb = $res->symb(); |
$symb = $res->symb(); |
$resourceString .= '<li>'.&mt('for the map named [_1]',"<b>$title</b>").'</li>'; |
if ($vars->{GRANULARITY} eq 'map') { |
|
$resourceString .= '<li>'.&mt('for the map named [_1]',"<b>$title</b>").'</li>'; |
|
} else { |
|
$resourceString .= '<li>'.&mt('for the map named [_1] (applies recursively to sub-folders)',"<b>$title</b>").'</li>'; |
|
} |
} else { |
} else { |
$resourceString .= '<li>'.&mt('for the map ID [_1] (name unavailable)','<b>'.$vars->{RESOURCE_ID}.'</b>').'</li>'; |
$resourceString .= '<li>'.&mt('for the map ID [_1] (name unavailable)','<b>'.$vars->{RESOURCE_ID}.'</b>').'</li>'; |
&Apache::lonnet::logthis('Retrieval of map title failed in lonhelper.pm - could not create navmap object for course.'); |
&Apache::lonnet::logthis('Retrieval of map title failed in lonhelper.pm - could not create navmap object for course.'); |
|
|
} |
} |
if ($vars->{TARGETS} eq 'course') { |
if ($vars->{GRANULARITY} eq 'maprecurse') { |
$level = 13; # general course, see lonparmset.pm perldoc |
if ($vars->{TARGETS} eq 'course') { |
} elsif ($vars->{TARGETS} eq 'section') { |
$level = 17; # general course, see lonparmset.pm perldoc |
$level = 8; |
} elsif ($vars->{TARGETS} eq 'section') { |
} elsif ($vars->{TARGETS} eq 'group') { |
$level = 11; |
$level = 5; |
} elsif ($vars->{TARGETS} eq 'group') { |
} else { |
$level = 7; |
$level = 2; |
} else { |
} |
$level = 3; |
|
} |
|
} else { |
|
if ($vars->{TARGETS} eq 'course') { |
|
$level = 16; # general course, see lonparmset.pm perldoc |
|
} elsif ($vars->{TARGETS} eq 'section') { |
|
$level = 10; |
|
} elsif ($vars->{TARGETS} eq 'group') { |
|
$level = 6; |
|
} else { |
|
$level = 2; |
|
} |
|
} |
$affectedResourceId = $vars->{RESOURCE_ID}; |
$affectedResourceId = $vars->{RESOURCE_ID}; |
$paramlevel = 'map'; |
$paramlevel = 'map'; |
} else { |
} else { |
Line 3823 sub render {
|
Line 3890 sub render {
|
&Apache::lonnet::logthis('Retrieval of resource title failed in lonhelper.pm - could not create navmap object for course.'); |
&Apache::lonnet::logthis('Retrieval of resource title failed in lonhelper.pm - could not create navmap object for course.'); |
} |
} |
if ($vars->{TARGETS} eq 'course') { |
if ($vars->{TARGETS} eq 'course') { |
$level = 10; # general course, see lonparmset.pm perldoc |
$level = 13; # general course, see lonparmset.pm perldoc |
} elsif ($vars->{TARGETS} eq 'section') { |
} elsif ($vars->{TARGETS} eq 'section') { |
$level = 7; |
$level = 9; |
} elsif ($vars->{TARGETS} eq 'group') { |
} elsif ($vars->{TARGETS} eq 'group') { |
$level = 4; |
$level = 5; |
} else { |
} else { |
$level = 1; |
$level = 1; |
} |
} |
Line 3843 sub render {
|
Line 3910 sub render {
|
if ($vars->{GRANULARITY} eq 'resource') { |
if ($vars->{GRANULARITY} eq 'resource') { |
$result .= "<input type='hidden' name='symb' value='". |
$result .= "<input type='hidden' name='symb' value='". |
HTML::Entities::encode($symb,"'<>&\"") . "' />\n"; |
HTML::Entities::encode($symb,"'<>&\"") . "' />\n"; |
} elsif ($vars->{GRANULARITY} eq 'map') { |
} elsif (($vars->{GRANULARITY} eq 'map') || ($vars->{GRANULARITY} eq 'maprecurse')) { |
$result .= "<input type='hidden' name='pschp' value='". |
$result .= "<input type='hidden' name='pschp' value='". |
$affectedResourceId."' />\n"; |
$affectedResourceId."' />\n"; |
} |
} |