Diff for /loncom/interface/loncoursegroups.pm between versions 1.123 and 1.132

version 1.123, 2014/02/11 17:09:30 version 1.132, 2023/07/29 20:33:25
Line 36  use Apache::lonlocal; Line 36  use Apache::lonlocal;
 use Apache::lonnavmaps();  use Apache::lonnavmaps();
 use Apache::longroup();  use Apache::longroup();
 use Apache::portfolio();  use Apache::portfolio();
   use Apache::lonuserutils();
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
   use HTML::Entities;
 use LONCAPA::map();  use LONCAPA::map();
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
Line 135  function changeSort(caller) { Line 137  function changeSort(caller) {
 }  }
 function openGroupRoster(group,status) {  function openGroupRoster(group,status) {
     var url = '/adm/grouproster?';      var url = '/adm/grouproster?';
     url += 'group='+group+'&status='+status+'&ref=popup';      url += 'group='+group+'&status='+status+'&ref=popup';
     var title = 'Group_Membership';      var title = 'Group_Membership';
     var options = 'scrollbars=1,resizable=1,menubar=0';      var options = 'scrollbars=1,resizable=1,menubar=0';
     options += ',width=700,height=600';      options += ',width=700,height=600';
Line 169  sub display_groups { Line 171  sub display_groups {
     my %curr_groups = ();      my %curr_groups = ();
     my %grp_info = ();      my %grp_info = ();
     my %actionlinks = (      my %actionlinks = (
       modify => '<a href="/adm/coursegroups?action=modify&refpage='.        modify   => '/adm/coursegroups?action=modify&refpage='.
                          $env{'form.refpage'}.'&state=pick_task&groupname=',                    $env{'form.refpage'}.'&state=pick_task&groupname=',
       view => '<a href="',        view     => '',
       delete => '<a href="/adm/coursegroups?action=delete&refpage='.        delete   => '/adm/coursegroups?action=delete&refpage='.
                          $env{'form.refpage'}.'&state=verify&groupname=',                    $env{'form.refpage'}.'&state=verify&groupname=',
       reenable => '<a href="/adm/coursegroups?action=reenable&refpage='.        reenable => '/adm/coursegroups?action=reenable&refpage='.
                          $env{'form.refpage'}.'&state=verify&groupname=',                    $env{'form.refpage'}.'&state=verify&groupname=',
     );      );
     my %lt = &Apache::lonlocal::texthash(       my %lt = &Apache::lonlocal::texthash( 
                           modify => 'Modify',                            modify => 'Modify',
Line 226  sub display_groups { Line 228  sub display_groups {
             if (!defined($navmap)) {              if (!defined($navmap)) {
                 $r->print('<div class="LC_error">'.                  $r->print('<div class="LC_error">'.
                           &mt('An error occurred retrieving information about resources in the course.').'<br />'.                            &mt('An error occurred retrieving information about resources in the course.').'<br />'.
                           &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'&orgurl=%2fadm%2fcoursegroups">','</a>').                            &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&amp;newrole='.$env{'request.role'}.'&amp;orgurl=%2fadm%2fcoursegroups">','</a>').
                           '</div>');                            '</div>');
                 return;                  return;
             }              }
Line 249  sub display_groups { Line 251  sub display_groups {
         <th><a href="javascript:changeSort('creator')">$lt{'crea'}</a></th>          <th><a href="javascript:changeSort('creator')">$lt{'crea'}</a></th>
         <th><a href="javascript:changeSort('creation')">$lt{'crtd'}</a></th>          <th><a href="javascript:changeSort('creation')">$lt{'crtd'}</a></th>
         <th><a href="javascript:changeSort('modified')">$lt{'last'}</a></th>          <th><a href="javascript:changeSort('modified')">$lt{'last'}</a></th>
         <th>$lt{'func'}</b></td>          <th>$lt{'func'}</th>
         <th><a href="javascript:changeSort('quota')">$lt{'quot'}</a></th>          <th><a href="javascript:changeSort('quota')">$lt{'quot'}</a></th>
         <th><a href="javascript:changeSort('totalmembers')">$lt{'memb'}</a></th>          <th><a href="javascript:changeSort('totalmembers')">$lt{'memb'}</a></th>
         <th><a href="javascript:changeSort('totalfiles')">$lt{'file'}</a></th>          <th><a href="javascript:changeSort('totalfiles')">$lt{'file'}</a></th>
Line 328  END Line 330  END
                     if (!$functionality) {                      if (!$functionality) {
                         $functionality = &mt('None available');                          $functionality = &mt('None available');
                     }                      }
                     my $link = $actionlinks{$action};                      my $link;
                     if ($action eq 'modify' || $action eq 'delete' ||                       if ($action eq 'modify' || $action eq 'delete' || 
                         $action eq 'reenable') {                          $action eq 'reenable') {
                         $link .= $group;                          $link = '<a href="'.&HTML::Entities::encode($actionlinks{$action}.$group,'<>&"').
                                   '">'.$lt{$action}.'</a>';
                     } else {                      } else {
                         $link .=                           $link =
                             &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap);                              &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap,
                         $link .= (($link=~/\?/)?'&amp;':'?').'ref=grouplist';                                                                $view_permission);
                         if (exists($env{'form.refpage'})) {                          if ($link) {
                             $link .= '&amp;refpage='.$env{'form.refpage'};                              $link = '<a href="'.$link;
                               $link .= (($link=~/\?/)?'&amp;':'?').'ref=grouplist';
                               if (exists($env{'form.refpage'})) {
                                   $link .= '&amp;refpage='.$env{'form.refpage'};
                               }
                               $link .= '">'.$lt{$action}.'</a>';
                         }                          }
                     }                      }
                     $link .= '">'.$lt{$action}.'</a>';  
                     if ($action eq 'view') {                       if ($action eq 'view') { 
                         if ($manage_permission) {                           if ($manage_permission) { 
                             $link .= '&nbsp;&nbsp;'.$actionlinks{'modify'}.                              $link .= '&nbsp;&nbsp;<a href="'.
                                       $group.'">'.$lt{'modify'}.'</a>'.                                        &HTML::Entities::encode($actionlinks{'modify'}.$group,'<>&"').
                                      '&nbsp;&nbsp;'.$actionlinks{'delete'}.                                        '">'.$lt{'modify'}.'</a>&nbsp;&nbsp;<a href="'.
                                       $group.'">'.$lt{'delete'}.'</a>';                                        &HTML::Entities::encode($actionlinks{'delete'}.$group,'<>&"').
                                         '">'.$lt{'delete'}.'</a>';
                         }                          }
                     }                      }
                     $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense').                      $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense').
Line 394  END Line 402  END
     } else {      } else {
         my @coursegroups = split(/:/,$env{'request.course.groups'});          my @coursegroups = split(/:/,$env{'request.course.groups'});
         if (@coursegroups > 0) {          if (@coursegroups > 0) {
               my $numlinks = 0;
             $r->print('<br /><br />');              $r->print('<br /><br />');
             my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);              my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
             if (%curr_groups) {              if (%curr_groups) {
Line 401  END Line 410  END
                 if (!defined($navmap)) {                  if (!defined($navmap)) {
                     $r->print('<div class="LC_error">'.                      $r->print('<div class="LC_error">'.
                               &mt('An error occurred retrieving information about resources in the course.').'<br />'.                                &mt('An error occurred retrieving information about resources in the course.').'<br />'.
                               &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'&orgurl=%2fadm%2fcoursegroups">','</a>').                                &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','<a href="/adm/roles?selectrole=1&amp;newrole='.$env{'request.role'}.'&amp;orgurl=%2fadm%2fcoursegroups">','</a>').
                               '</div>');                                '</div>');
                     return;                      return;
                 }                  }
Line 410  END Line 419  END
                                         $curr_groups{$group});                                          $curr_groups{$group});
                     my $description = &unescape(                      my $description = &unescape(
                                         $group_info{description});                                          $group_info{description});
                     my $link =                       my ($link,$hidden) = 
                         &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap).                          &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap,
                         '&amp;ref=grouplist';                                                            $view_permission);
                     $r->print('<span style="font-size: larger"><a href="'.$link.'">'.$group,'</a></span><br /><small>'.$description.'</small><br /><br />');                      if ($link) {
                           $link .= '&amp;ref=grouplist';
                           $r->print('<span style="font-size: larger"><a href="'.$link.'">'.
                                     $description.'</a></span><br /><br />');
                           $numlinks ++;
                       } elsif ($hidden) {
                           my $numtools = 0;
                           my $refarg = '&amp;ref=grouplist'; 
                           my $output =
                               &Apache::longroup::display_group_links($r,$env{'form.grade_target'},$group,'view',
                                                                      $refarg,\$numtools,$hidden,%group_info);
                           if ($numtools) {
                               $r->print('<span style="font-size: larger">'.$description.'</a></span>'.
                                         '<br />'.$output.'<br /><br />');
                               $numlinks ++;
                           }
                       }
                 }                  }
             }              }
               if (!$numlinks) {
                   $r->print(
                       '<p class="LC_info">'
                      .&mt('You do not currently have access to any '.$gpterm.'s'
                      .' in this '.lc($crstype).'.')
                      .'</p>'
                   );
               }
         } else {          } else {
             $r->print(              $r->print(
                 '<p class="LC_info">'                  '<p class="LC_info">'
Line 831  sub group_administration { Line 864  sub group_administration {
             }              }
         }          }
         if (warn_zero == 1) {          if (warn_zero == 1) {
             alert("You have indicated that the group portfolio should be enabled, but you have set the respository quota to 0 MB.\nThis will prevent any upload of files.\nPlease set a value or disable the repository feature.");              alert("You have indicated that the group portfolio should be enabled, but you have set the repository quota to 0 MB.\nThis will prevent any upload of files.\nPlease set a value or disable the repository feature.");
             return;              return;
         }          }
     }       } 
Line 897  function changeSort(caller) { Line 930  function changeSort(caller) {
           faq=>9,bug=>'Instructor Interface',});            faq=>9,bug=>'Instructor Interface',});
         if ($action eq 'modify' || $action eq 'delete') {          if ($action eq 'modify' || $action eq 'delete') {
             &Apache::lonhtmlcommon::add_breadcrumb              &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>"/adm/coursegroups?refpage=cusr&action=$action",              ({href=>"/adm/coursegroups?refpage=cusr&amp;action=$action",
               text=>"Groups",                text=>"Groups",
               faq=>9,bug=>'Instructor Interface',});                faq=>9,bug=>'Instructor Interface',});
         }          }
Line 909  function changeSort(caller) { Line 942  function changeSort(caller) {
         if ($env{'form.refpage'} eq 'grouplist') {          if ($env{'form.refpage'} eq 'grouplist') {
             &Apache::lonhtmlcommon::add_breadcrumb              &Apache::lonhtmlcommon::add_breadcrumb
              ({href=>"/adm/$cdom/$cnum/$env{'form.groupname'}/smppg?ref=grouplist",               ({href=>"/adm/$cdom/$cnum/$env{'form.groupname'}/smppg?ref=grouplist",
                text=>"Group: $description",});                 text=>&mt('Group').": $description",
                  no_mt=>1});
         }          }
     }      }
   
Line 1587  sub group_members { Line 1621  sub group_members {
                          future => 0,                           future => 0,
                        );                         );
     my $totalmembers = 0;      my $totalmembers = 0;
     foreach my $member (keys %memberhash) {      foreach my $member (keys(%memberhash)) {
         $totalmembers ++;          $totalmembers ++;
         my ($end,$start) = split(/:/,$memberhash{$member});          my ($end,$start) = split(/:/,$memberhash{$member});
         unless ($start == -1) {          unless ($start == -1) {
Line 1702  sub groupsettings_options { Line 1736  sub groupsettings_options {
     if ($remnum) {      if ($remnum) {
         $halfnum ++;          $halfnum ++;
     }      }
     my @allfunctions = sort(keys (%{$functions}));      my @allfunctions = sort(keys(%{$functions}));
   
     $r->print(&Apache::lonhtmlcommon::row_title($lt{'func'})      $r->print(&Apache::lonhtmlcommon::row_title($lt{'func'})
              .'<div>'               .'<div>'
Line 1785  sub get_quota_constraints { Line 1819  sub get_quota_constraints {
     my ($crsquota,$freespace,$maxposs);       my ($crsquota,$freespace,$maxposs); 
     $crsquota = $env{'course.'.$env{'request.course.id'}.'.internal.coursequota'};      $crsquota = $env{'course.'.$env{'request.course.id'}.'.internal.coursequota'};
     if ($crsquota eq '') {      if ($crsquota eq '') {
         $crsquota = 20;          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $crstype = &Apache::loncommon::course_type();
           my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
           my %coursehash = (
               'internal.coursecode' => $env{'course.'.$env{'request.course.id'}.'.internal.coursecode'},
               'internal.textbook'   => $env{'course.'.$env{'request.course.id'}.'.internal.textbook'},
           );
           my %staticdefaults = (
                              coursequota   => 20,
           );
           my $quotatype = &Apache::lonuserutils::get_extended_type($cdom,$cnum,$crstype,\%coursehash);
           if ($crsquota eq '') {
               $crsquota = $domdefs{$quotatype.'coursequota'};
               if ($crsquota eq '') {
                   $crsquota = $staticdefaults{'coursequota'};
               }
           }
     }      }
     $freespace = $crsquota - &Apache::longroup::sum_quotas();      $freespace = $crsquota - &Apache::longroup::sum_quotas();
     if ($action eq 'create') {      if ($action eq 'create') {
Line 3503  sub process_membership { Line 3554  sub process_membership {
                 if (grep/^$user$/,@reenable) {                  if (grep/^$user$/,@reenable) {
                     $start = $startdate;                      $start = $startdate;
                     $end = $enddate;                      $end = $enddate;
                     $type = 'reenabled';                      $type = 're-enabled';
                 }                  }
             }              }
             if ($type eq '') {              if ($type eq '') {
Line 3543  sub process_membership { Line 3594  sub process_membership {
             my $tmsg = "The following users were successfully $type";               my $tmsg = "The following users were successfully $type"; 
             if (!($type eq 'deleted' || $type eq 'expired')) {                 if (!($type eq 'deleted' || $type eq 'expired')) {   
                 $tmsg .= ' with the following privileges';                  $tmsg .= ' with the following privileges';
             } else {  
                 $tmsg .= ' with the following privileges';  
             }              }
             $message .= &mt($tmsg.':').'<br/>';              $message .= &mt($tmsg.':').'<br/>';
             foreach my $user (@{$added{$type}}) {              foreach my $user (@{$added{$type}}) {
Line 3758  sub modify_menu { Line 3807  sub modify_menu {
  items => [   items => [
   
           { linktext => "Modify default $gpterm settings",            { linktext => "Modify default $gpterm settings",
             url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_settings&branch=settings',              url => '/adm/coursegroups?action=modify&amp;refpage='.$env{'form.refpage'}.'&amp;groupname='.$groupname.'&amp;state=change_settings&amp;branch=settings',
             icon => 'grp_settings.png',              icon => 'grp_settings.png',
             alttext => "Modify default $gpterm settings",              alttext => "Modify default $gpterm settings",
             permission => '1',              permission => '1',
             help => 'Course_Modify_Group',                          help => 'Course_Modify_Group',            
             },              },
           { linktext => 'Modify access, tools and privileges for members',            { linktext => 'Modify access, tools and privileges for members',
             url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_members&branch=members',              url => '/adm/coursegroups?action=modify&amp;refpage='.$env{'form.refpage'}.'&amp;groupname='.$groupname.'&amp;state=change_members&amp;branch=members',
             icon => 'grp_tools.png',              icon => 'grp_tools.png',
             alttext => 'Modify access, tools and privileges for members',              alttext => 'Modify access, tools and privileges for members',
             permission => '1',              permission => '1',
             help => 'Course_Modify_Group_Membership',              help => 'Course_Modify_Group_Membership',
             },              },
           { linktext => "Add member(s) to the $gpterm",            { linktext => "Add member(s) to the $gpterm",
             url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=add_members&branch=adds',              url => '/adm/coursegroups?action=modify&amp;refpage='.$env{'form.refpage'}.'&amp;groupname='.$groupname.'&amp;state=add_members&amp;branch=adds',
             icon => 'grp_add.png',              icon => 'grp_add.png',
             alttext =>  "Add member(s) to the $gpterm",              alttext =>  "Add member(s) to the $gpterm",
             permission => '1',              permission => '1',
Line 4190  sub validate_groupname { Line 4239  sub validate_groupname {
     }      }
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                       igna => "Invalid $gpterm name",                        igna => "Invalid $gpterm name",
                       tgne => "The $gpterm name entered ",  
                       grna => "$ucgpterm names and section names used in a ".                        grna => "$ucgpterm names and section names used in a ".
                                "$crstype must be unique.",                                 "$crstype must be unique.",
                       isno => "is not a valid name.",  
                       gnmo => "$ucgpterm names may only contain letters, ".                         gnmo => "$ucgpterm names may only contain letters, ". 
                               "numbers or underscores.",                                "numbers or underscores.",
                       cnnb => "can not be used as it is the name of ",  
                       inth => " in this $crstype",   
                       thgr => "- does not correspond to the name of an ".  
                               "existing $gpterm",      
     );      );
   
     my $exitmsg = '<span class="LC_error">'.$lt{'igna'}.'</span><br /><br />'.      my $exitmsg = '<span class="LC_error">'.$lt{'igna'}.'</span><br /><br />';
  $lt{'tgne'}.' "'.$groupname.'" ';      my $nameshown = &Apache::loncommon::cleanup_html($groupname);
     my $dupmsg = $lt{'grna'};  
     my $earlyout;  
     if (($groupname eq '') || ($groupname =~ /\W/)) {      if (($groupname eq '') || ($groupname =~ /\W/)) {
         $earlyout = $exitmsg.$lt{'isno'}.'<br />'.$lt{'gnmo'};          return $exitmsg.
         return $earlyout;                 &mt("The $gpterm name entered '[_1]' is not a valid name.",$nameshown).
                  '<br />'.$lt{'gnmo'};
       } elsif ($groupname eq 'syllabus') {
           return $exitmsg.
                  &mt("The $gpterm name entered '[_1]' is reserved for use by LON-CAPA.",$nameshown);
     }      }
     if (exists($sectioncount{$groupname})) {      if (exists($sectioncount{$groupname})) {
  return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.   return  $exitmsg.
     '<br />'.$lt{'grna'};                  &mt("The $gpterm name entered '[_1]' can not be used as it is the name of a section in this $crstype.",$nameshown).
           '<br />'.$lt{'grna'};
     }      }
     if ($action eq 'create') {       if ($action eq 'create') { 
  if (exists($curr_groups{$groupname})) {   if (exists($curr_groups{$groupname})) {
     return $exitmsg.$lt{'cnnb'}.&mt("an existing $gpterm").      return $exitmsg.
            $lt{'inth'}.'.<br />'.$lt{'grna'};                     &mt("The $gpterm name entered '[_1]' can not be used as it is the name of an existing $gpterm in this $crstype.",$nameshown).
                     '<br />'.$lt{'grna'};
         } elsif (exists($deleted_groups{$groupname})) {          } elsif (exists($deleted_groups{$groupname})) {
             return $exitmsg.$lt{'cnnb'}.&mt("a $gpterm which previously existed").              return $exitmsg.
                    $lt{'inth'}.'.<br />'.$lt{'grna'};                     &mt("The $gpterm name entered '[_1]' can not be used as it is the name of a $gpterm which previously existed in this $crstype.",$nameshown).
                      '<br />'.$lt{'grna'};
         }          }
     } elsif ($action eq 'modify') {      } elsif ($action eq 'modify') {
         unless(exists($curr_groups{$groupname})) {          unless(exists($curr_groups{$groupname})) {
             $earlyout = &mt("$ucgpterm name:").' '.$groupname.$lt{'thgr'}.              return &mt("$ucgpterm name: [_1] does not correspond to the name of an existing $gpterm in this $crstype.",$nameshown);
                         $lt{'inth'};  
             return $earlyout;  
         }          }
     }      }
     return;      return;

Removed from v.1.123  
changed lines
  Added in v.1.132


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