Diff for /loncom/interface/lonhelper.pm between versions 1.194 and 1.199

version 1.194, 2015/08/14 15:34:01 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 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 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 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";
     }      }

Removed from v.1.194  
changed lines
  Added in v.1.199


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>