Diff for /loncom/interface/lonmenu.pm between versions 1.369.2.64 and 1.369.2.72

version 1.369.2.64, 2016/10/31 21:05:59 version 1.369.2.72, 2018/09/03 14:30:16
Line 384  sub secondary_menu { Line 384  sub secondary_menu {
                                                ? "/$env{'request.course.sec'}"                                                 ? "/$env{'request.course.sec'}"
                                                : '');                                                 : '');
     my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});      my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
       my $canvieweditor = &Apache::lonnet::allowed('cev', $env{'request.course.id'}); 
     my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};      my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};
     if ($canviewroster eq 'disabled') {      if ($canviewroster eq 'disabled') {
         undef($canviewroster);          undef($canviewroster);
Line 402  sub secondary_menu { Line 403  sub secondary_menu {
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         unless ($canedit) {          unless ($canedit || $canvieweditor) {
             unless (&Apache::lonnet::is_on_map("public/$cdom/$cnum/syllabus")) {              unless (&Apache::lonnet::is_on_map("public/$cdom/$cnum/syllabus")) {
                 if (($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) ||                  if (($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) ||
                     ($env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) ||                      ($env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) ||
Line 415  sub secondary_menu { Line 416  sub secondary_menu {
                 $showfeeds = 1;                  $showfeeds = 1;
             }              }
         }          }
         unless (($canmgr) || ($canvgr)) {          unless ($canmgr || $canvgr) {
             my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);              my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);
             if (keys(%slots) > 0) {              if (keys(%slots) > 0) {
                 $showresv = 1;                  $showresv = 1;
Line 445  sub secondary_menu { Line 446  sub secondary_menu {
         next if    $$menuitem[4]   ne 'always'          next if    $$menuitem[4]   ne 'always'
                 && ($$menuitem[4]  ne 'author' && $$menuitem[4] ne 'cca')                  && ($$menuitem[4]  ne 'author' && $$menuitem[4] ne 'cca')
                 && !$env{'request.course.id'};                  && !$env{'request.course.id'};
         next if    $$menuitem[4]   =~ /^mdc/          next if    $$menuitem[4]   =~ /^crsedit/
                 && !$canedit;                  && (!$canedit && !$canvieweditor);
         next if    $$menuitem[4]  eq 'mdcCourse'          next if    $$menuitem[4]  eq 'crseditCourse'
                 && ($crstype eq 'Community');                  && ($crstype eq 'Community');
         next if    $$menuitem[4]  eq 'mdcCommunity'          next if    $$menuitem[4]  eq 'crseditCommunity'
                 && ($crstype eq 'Course');                  && ($crstype eq 'Course');
         next if    $$menuitem[4]  eq 'nvgr'          next if    $$menuitem[4]  eq 'nvgr'
                 && $canvgr;                  && $canvgr;
Line 497  sub secondary_menu { Line 498  sub secondary_menu {
                         next if ($item->[2] eq 'viewusers' && !($canmodifyuser || $canviewusers));                          next if ($item->[2] eq 'viewusers' && !($canmodifyuser || $canviewusers));
                         next if ($item->[2] eq 'mgr' && !$canmgr);                          next if ($item->[2] eq 'mgr' && !$canmgr);
                         next if ($item->[2] eq 'vcg' && !$canviewgrps);                          next if ($item->[2] eq 'vcg' && !$canviewgrps);
                         next if ($item->[2] eq 'mdc' && !$canedit);                          next if ($item->[2] eq 'crsedit' && !$canedit && !$canvieweditor);
                           next if ($item->[2] eq 'author' && !$author);
                           next if ($item->[2] eq 'cca' && !$canmodifycoauthor);
                         push(@scndsub,$item);                           push(@scndsub,$item); 
                     }                      }
                 }                  }
Line 527  sub secondary_menu { Line 530  sub secondary_menu {
                 } else {                  } else {
                     $$menuitem[0] =~ s{\?register=1}{};                      $$menuitem[0] =~ s{\?register=1}{};
                 }                  }
                   $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"');
             }              }
             $menu .= &prep_menuitem(\@$menuitem);              $menu .= &prep_menuitem(\@$menuitem);
         }          }
Line 545  sub secondary_menu { Line 549  sub secondary_menu {
             my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};              my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
             ($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{};              ($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{};
             $escurl  = &escape($escurl);              $escurl  = &escape($escurl);
         }              }
         $menu =~ s/\[url\]/$escurl/g;          $menu =~ s/\[url\]/$escurl/g;
         $menu =~ s/\[symb\]/$escsymb/g;          $menu =~ s/\[symb\]/$escsymb/g;
     }      }
Line 634  sub build_submenu { Line 638  sub build_submenu {
                     next unless (($env{'user.name'} ne '') && ($env{'user.domain'} ne ''));                      next unless (($env{'user.name'} ne '') && ($env{'user.domain'} ne ''));
                     $href =~ s/\[domain\]/$env{'user.domain'}/g;                      $href =~ s/\[domain\]/$env{'user.domain'}/g;
                     $href =~ s/\[user\]/$env{'user.name'}/g;                      $href =~ s/\[user\]/$env{'user.name'}/g;
                   } elsif (($href =~ m{^/adm/preferences\?}) && ($href =~ /\[returnurl\]/)) {
                       my $returnurl = $ENV{'REQUEST_URI'};
                       if ($ENV{'REQUEST_URI'} =~ m{/adm/preferences\?action=(?:changedomcoord|authorsettings)\&returnurl=([^\&]+)$}) {
                           $returnurl = $1;
                       }
                       if (($returnurl =~ m{^/adm/createuser($|\?action=)}) ||
                           ($returnurl =~ m{^/priv/$match_domain/$match_username}) ||
                           ($returnurl =~ m{^/res(/?$|/$match_domain/$match_username)})) {
                           $returnurl =~ s{\?.*$}{};
                           $returnurl = '&amp;returnurl='.&HTML::Entities::encode($returnurl,'"<>&\'');
                       } else {
                           undef($returnurl);
                       }
                       $href =~ s/\[returnurl\]/$returnurl/;
                 }                  }
                 unless (($href eq '') || ($href =~ /^\#/)) {                  unless (($href eq '') || ($href =~ /^\#/)) {
                     $target = ' target="_top"';                      $target = ' target="_top"';
Line 823  sub innerregister { Line 841  sub innerregister {
             $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};              $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
             $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};              $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
             $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});              $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});
               $perms{'cev'} = &Apache::lonnet::allowed('cev',$env{'request.course.id'});
             my @privs;              my @privs;
             if ($env{'request.symb'} ne '') {              if ($env{'request.symb'} ne '') {
                 if ($env{'request.filename'}=~/$LONCAPA::assess_re/) {                  if ($env{'request.filename'}=~/$LONCAPA::assess_re/) {
Line 864  sub innerregister { Line 883  sub innerregister {
 #  #
 # This applies to items inside a folder/page modifiable in the course.  # This applies to items inside a folder/page modifiable in the course.
 #  #
             if (($env{'request.symb'}=~/^uploaded/) && ($perms{'mdc'})) {              if (($env{'request.symb'}=~/^uploaded/) && (($perms{'mdc'}) || ($perms{'cev'}))) {
                 my $text = 'Edit Folder';                  my $text = 'Edit Folder';
                 if (($mapurl =~ /\.page$/) ||                  if (($mapurl =~ /\.page$/) ||
                     ($env{'request.symb'}=~                      ($env{'request.symb'}=~
Line 1401  sub get_editbutton { Line 1420  sub get_editbutton {
     my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_;      my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_;
     my $jscall;      my $jscall;
     if (($forceview) && ($env{'form.todocs'})) {      if (($forceview) && ($env{'form.todocs'})) {
         my ($folderpath,$command);          my ($folderpath,$command,$navmap);
         if ($env{'request.symb'}) {          if ($env{'request.symb'}) {
             $folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'});              $folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'},\$navmap);
         } elsif ($env{'form.folderpath'} =~ /^supplemental/) {          } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
             $folderpath = $env{'form.folderpath'};              $folderpath = $env{'form.folderpath'};
             $command = '&forcesupplement=1';              $command = '&forcesupplement=1';
Line 1499  sub prepare_functions { Line 1518  sub prepare_functions {
 # This applies in course context  # This applies in course context
 #  #
         if (($perms{'mdc'}) &&          if (($perms{'mdc'}) &&
             (($resurl eq "/public/$cdom/$cnum/syllabus") ||              (($resurl =~ m{^/?public/$cdom/$cnum/syllabus}) ||
             ($resurl =~ m{^/uploaded/$cdom/$cnum/portfolio/syllabus/}))) {              ($resurl =~ m{^/?uploaded/$cdom/$cnum/portfolio/syllabus/}))) {
             $cfile = $resurl;              if ($resurl =~ m{^/}) {
                   $cfile = $resurl;
               } else {
                   $cfile = "/$resurl";
               }
             $home = &Apache::lonnet::homeserver($cnum,$cdom);              $home = &Apache::lonnet::homeserver($cnum,$cdom);
             if ($env{'form.forceedit'}) {              if ($env{'form.forceedit'}) {
                 $forceview = 1;                  $forceview = 1;
Line 2154  return (<<ENDUTILITY) Line 2177  return (<<ENDUTILITY)
   
 $dc_popup_cid  $dc_popup_cid
   
 function go(url) {  
    if (url!='' && url!= null) {  
        currentURL = null;  
        currentSymb= null;  
        var lcHostname = setLCHost();  
        window.location.href=lcHostname+url;  
    }  
 }  
   
 $jumptores  $jumptores
   
 function gopost(url,postdata) {  function gopost(url,postdata) {
Line 2358  sub roles_selector { Line 2372  sub roles_selector {
     my ($cdom,$cnum,$httphost) = @_;      my ($cdom,$cnum,$httphost) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     my $now = time;      my $now = time;
     my (%courseroles,%seccount,%courseprivs);      my (%courseroles,%seccount,%courseprivs,%roledesc);
     my $is_cc;      my $is_cc;
     my ($js,$form,$switcher);      my ($js,$form,$switcher);
     my $ccrole;      my $ccrole;
Line 2408  sub roles_selector { Line 2422  sub roles_selector {
     if ($is_cc) {      if ($is_cc) {
         &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs);          &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs);
     } elsif ($env{'request.role'} =~ m{^\Qcr/$cdom/$cdom-domainconfig/\E(\w+)\.\Q/$cdom/$cnum\E}) {      } elsif ($env{'request.role'} =~ m{^\Qcr/$cdom/$cdom-domainconfig/\E(\w+)\.\Q/$cdom/$cnum\E}) {
         &get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$privref);          &get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,\%roledesc,$privref);
     } else {      } else {
         my %gotnosection;          my %gotnosection;
         foreach my $item (keys(%env)) {          foreach my $item (keys(%env)) {
Line 2462  sub roles_selector { Line 2476  sub roles_selector {
     }      }
     if ((keys(%seccount) > 1) || ($numdiffsec > 1)) {      if ((keys(%seccount) > 1) || ($numdiffsec > 1)) {
         my @submenu;          my @submenu;
         $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$privref);          $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,\%roledesc,$privref);
         $form =           $form = 
             '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n".              '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n".
             '  <input type="hidden" name="destinationurl" value="'.              '  <input type="hidden" name="destinationurl" value="'.
Line 2502  sub roles_selector { Line 2516  sub roles_selector {
                     $include = 1;                      $include = 1;
                 }                  }
                 if ($include) {                  if ($include) {
                       my $rolename;
                       if ($role =~ m{^cr/$cdom/$cdom\-domainconfig/(\w+)(?:/\w+|$)}) {
                           $rolename = $roledesc{$role};
                           if ($rolename eq '') {
                               $rolename = &mt('Helpdesk [_1]',$1);
                           }
                       } else {
                           $rolename = &Apache::lonnet::plaintext($role);
                       }
                     push(@submenu,['javascript:adhocRole('."'$role'".')',                      push(@submenu,['javascript:adhocRole('."'$role'".')',
                                    &Apache::lonnet::plaintext($role)]);                                     $rolename]);
                 }                  }
             }              }
         }          }
Line 2585  sub get_all_courseroles { Line 2608  sub get_all_courseroles {
 }  }
   
 sub get_customadhoc_roles {  sub get_customadhoc_roles {
     my ($cdom,$cnum,$courseroles,$seccount,$courseprivs,$privref) = @_;      my ($cdom,$cnum,$courseroles,$seccount,$courseprivs,$roledesc,$privref) = @_;
     unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') &&      unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') &&
             (ref($courseprivs) eq 'HASH')) {              (ref($courseprivs) eq 'HASH') && (ref($roledesc) eq 'HASH')) {
         return;          return;
     }      }
     if ($env{'environment.adhocroles.'.$cdom} ne '') {      my $is_helpdesk = 0;
         my @customroles = split(/,/,$env{'environment.adhocroles.'.$cdom});      my $now = time;
         if (@customroles > 1) {      foreach my $role ('dh','da') {
             if ($env{"user.role.dh./$cdom/"}) {          if ($env{"user.role.$role./$cdom/"}) {
                 my ($start,$end)=split(/\./,$env{"user.role.dh./$cdom/"});              my ($start,$end)=split(/\./,$env{"user.role.$role./$cdom/"});
                 my $now = time;              if (!($start && ($now<$start)) && !($end && ($now>$end))) {
                 if (!($start && ($now<$start)) & !($end && ($now>$end))) {                  $is_helpdesk = 1;
                     my $numsec = 1;                  last;
                     my @sections;              }
                     my ($allseclist,$cached) =          }
                         &Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum);      }
                     if (defined($cached)) {      if ($is_helpdesk) {
                         if ($allseclist ne '') {          my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum);
                             @sections = split(/,/,$allseclist);          my %available;
                             $numsec += scalar(@sections);          if (ref($possroles) eq 'ARRAY') {
                         }              map { $available{$_} = 1; } @{$possroles};
                     } else {          }
                         my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);          my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
                         $numsec += scalar(keys(%sections_count));          if (ref($domdefaults{'adhocroles'}) eq 'HASH') {
                         $allseclist = join(',',sort(keys(%sections_count)));              if (keys(%{$domdefaults{'adhocroles'}})) {
                         &Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist);                  my $numsec = 1;
                     }                  my @sections;
                     my (%adhoc,$gotprivs);                  my ($allseclist,$cached) =
                     my $prefix = "cr/$cdom/$cdom".'-domainconfig';                      &Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum);
                     foreach my $role (@customroles) {                  if (defined($cached)) {
                         next if (($role eq '') || ($role =~ /\W/));                      if ($allseclist ne '') {
                         $seccount->{"$prefix/$role"} = $numsec;                          @sections = split(/,/,$allseclist);
                         $courseroles->{"$prefix/$role"} = \@sections;                          $numsec += scalar(@sections);
                         if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) {                      }
                             if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) {                  } else {
                                 $courseprivs->{"$prefix/$role./$cdom/$cnum./"} =                      my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
                                     $env{"user.priv.$prefix/$role./$cdom/$cnum./"};                      @sections = sort(keys(%sections_count));
                                 $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} =                      $numsec += scalar(@sections);
                                     $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"};                      $allseclist = join(',',@sections);
                                 $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} =                      &Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist);
                                     $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"};                  }
                             } else {                  my (%adhoc,$gotprivs);
                                 unless ($gotprivs) {                  my $prefix = "cr/$cdom/$cdom".'-domainconfig';
                                     my ($adhocroles,$privscached) =                  foreach my $role (keys(%{$domdefaults{'adhocroles'}})) {
                                         &Apache::lonnet::is_cached_new('adhocroles',$cdom);                      next if (($role eq '') || ($role =~ /\W/));
                                     if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) {                      $seccount->{"$prefix/$role"} = $numsec;
                                         %adhoc = %{$adhocroles};                      $roledesc->{"$prefix/$role"} = $description->{$role};  
                                     } else {                      if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) {
                                         my $confname = &Apache::lonnet::get_domainconfiguser($cdom);                          if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) {
                                         my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_');                              $courseprivs->{"$prefix/$role./$cdom/$cnum./"} =
                                         foreach my $key (keys(%roledefs)) {                                  $env{"user.priv.$prefix/$role./$cdom/$cnum./"};
                                             (undef,my $rolename) = split(/_/,$key);                              $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} =
                                             if ($rolename ne '') {                                  $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"};
                                                 $adhoc{$rolename} = $roledefs{$key};                              $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} =
                                             }                                  $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"};
                           } else {
                               unless ($gotprivs) {
                                   my ($adhocroles,$privscached) =
                                       &Apache::lonnet::is_cached_new('adhocroles',$cdom);
                                   if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) {
                                       %adhoc = %{$adhocroles};
                                   } else {
                                       my $confname = &Apache::lonnet::get_domainconfiguser($cdom);
                                       my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_');
                                       foreach my $key (keys(%roledefs)) {
                                           (undef,my $rolename) = split(/_/,$key);
                                           if ($rolename ne '') {
                                               my ($systempriv,$domainpriv,$coursepriv) = split(/\_/,$roledefs{$key});
                                               $coursepriv = &Apache::lonnet::course_adhocrole_privs($rolename,$cdom,$cnum,$coursepriv);
                                               $adhoc{$rolename} = join('_',($systempriv,$domainpriv,$coursepriv));
                                         }                                          }
                                         &Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc);  
                                     }                                      }
                                     $gotprivs = 1;                                      &Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc);
                                 }                                  }
                                 ($courseprivs->{"$prefix/$role./$cdom/$cnum./"},                                  $gotprivs = 1;
                                  $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"},  
                                  $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) =  
                                      split(/\_/,$adhoc{$role});  
                             }                              }
                               ($courseprivs->{"$prefix/$role./$cdom/$cnum./"},
                                $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"},
                                $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) =
                                    split(/\_/,$adhoc{$role});
                         }                          }
                     }                      }
                       if ($available{$role}) {
                           $courseroles->{"$prefix/$role"} = \@sections;
                       }
                 }                  }
             }              }
         }          }
Line 2660  sub get_customadhoc_roles { Line 2701  sub get_customadhoc_roles {
 }  }
   
 sub jump_to_role {  sub jump_to_role {
     my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$privref) = @_;      my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$roledesc,$privref) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 this => 'This role has section(s) associated with it.',                  this => 'This role has section(s) associated with it.',
                 ente => 'Enter a specific section.',                  ente => 'Enter a specific section.',
Line 2813  sub required_privs { Line 2854  sub required_privs {
              '/adm/parmset'      => 'opa,vpa',               '/adm/parmset'      => 'opa,vpa',
              '/adm/courseprefs'  => 'opa,vpa',               '/adm/courseprefs'  => 'opa,vpa',
              '/adm/whatsnew'     => 'whn',               '/adm/whatsnew'     => 'whn',
              '/adm/populate'     => 'cst',               '/adm/populate'     => 'cst,vpa,vcl',
              '/adm/trackstudent' => 'vsa',               '/adm/trackstudent' => 'vsa',
              '/adm/statistics'   => 'mgr,vgr',               '/adm/statistics'   => 'mgr,vgr',
              '/adm/setblock'     => 'dcm,vcb',               '/adm/setblock'     => 'dcm,vcb',

Removed from v.1.369.2.64  
changed lines
  Added in v.1.369.2.72


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