![]() ![]() | ![]() |
Start on interface to manage course groups.
1: # 2: # Copyright Michigan State University Board of Trustees 3: # 4: # This file is part of the LearningOnline Network with CAPA (LON-CAPA). 5: # 6: # LON-CAPA is free software; you can redistribute it and/or modify 7: # it under the terms of the GNU General Public License as published by 8: # the Free Software Foundation; either version 2 of the License, or 9: # (at your option) any later version. 10: # 11: # LON-CAPA is distributed in the hope that it will be useful, 12: # but WITHOUT ANY WARRANTY; without even the implied warranty of 13: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14: # GNU General Public License for more details. 15: # 16: # You should have received a copy of the GNU General Public License 17: # along with LON-CAPA; if not, write to the Free Software 18: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19: # 20: # /home/httpd/html/adm/gpl.txt 21: # 22: # http://www.lon-capa.org/ 23: # 24: 25: package Apache::loncoursegroups; 26: 27: use strict; 28: use Apache::lonnet; 29: use Apache::loncommon; 30: use Apache::lonhtmlcommon; 31: use Apache::lonlocal; 32: use Apache::Constants qw(:common :http); 33: 34: sub handler { 35: my ($r) = @_; 36: &Apache::loncommon::content_type($r,'text/html'); 37: $r->send_http_header; 38: 39: if ($r->header_only) { 40: return OK; 41: } 42: 43: &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, 44: ['action','state']); 45: 46: $r->print(&header()); 47: 48: &Apache::lonhtmlcommon::clear_breadcrumbs(); 49: &Apache::lonhtmlcommon::add_breadcrumb 50: ({href=>"/adm/groups", 51: text=>"Group Management", 52: faq=>9,bug=>'Instructor Interface',}); 53: # Needs to be in a course 54: if (! ($env{'request.course.fn'})) { 55: # Not in a course 56: $env{'user.error.msg'}= 57: "/adm/groups:mdg:0:0:Cannot create, modify or delete course groups"; 58: return HTTP_NOT_ACCEPTABLE; 59: } 60: 61: my $view_permission = 62: &Apache::lonnet::allowed('vcg',$env{'request.course.id'}); 63: my $manage_permission = 64: &Apache::lonnet::allowed('mdg',$env{'request.course.id'}); 65: 66: if (! exists($env{'form.action'})) { 67: $r->print(&Apache::lonhtmlcommon::breadcrumbs 68: (undef,'Course Group Manager')); 69: &print_main_menu($r,$manage_permission,$view_permission); 70: } elsif ($env{'form.action'} eq 'create' && $manage_permission) { 71: &Apache::lonhtmlcommon::add_breadcrumb 72: ({href=>'/adm/coursegroups?action=create&state=', 73: text=>"Create Group"}); 74: $r->print(&Apache::lonhtmlcommon::breadcrumbs 75: (undef,'Create Group','Course_Create_Group')); 76: if (! exists($env{'form.state'})) { 77: &first_creation_form($r); 78: } elsif ($env{'form.state'} eq 'pick_members') { 79: &second_creation_form($r); 80: } elsif ($env{'form.state'} eq 'complete') { 81: &completed_creation($r); 82: } else { 83: &first_creation_form($r); 84: } 85: } 86: $r->print(&footer()); 87: return OK; 88: } 89: 90: sub header { 91: my $html=&Apache::lonxml::xmlbegin(); 92: my $bodytag=&Apache::loncommon::bodytag('Course Groups Manager'); 93: my $title = &mt('LON-CAPA Groups Manager'); 94: return(<<ENDHEAD); 95: $html 96: <head> 97: <title>$title</title> 98: </head> 99: $bodytag 100: <form method="post" 101: action="/adm/coursegroup" name="form"> 102: ENDHEAD 103: } 104: 105: sub print_main_menu { 106: my ($r,$manage_permission,$view_permission)=@_; 107: my ($cdom,$cnum) = split/_/,$env{'request.course.id'}; 108: my @menu = 109: ( 110: { text => 'Create a new group', 111: help => 'Course_Create_Group', 112: action => 'create', 113: permission => $manage_permission, 114: }, 115: { text => 'Modify an existing group', 116: help => 'Course_Modify_Group', 117: action => 'modify', 118: permission => $manage_permission, 119: }, 120: { text => 'Delete an existing group', 121: help => 'Course_Delete_Group', 122: action => 'delete', 123: permission => $manage_permission, 124: }, 125: { text => 'Enter an existing group', 126: help => 'Course_Display_Group', 127: action => 'display', 128: permission => $view_permission, 129: }, 130: ); 131: my $menu_html = ''; 132: foreach my $menu_item (@menu) { 133: next if (! $menu_item->{'permission'}); 134: $menu_html.='<p>'; 135: $menu_html.='<font size="+1">'; 136: if (exists($menu_item->{'url'})) { 137: $menu_html.=qq{<a href="$menu_item->{'url'}">}; 138: } else { 139: $menu_html.= 140: qq{<a href="/adm/coursegroups?action=$menu_item->{'action'}">}; 141: } 142: $menu_html.= &mt($menu_item->{'text'}).'</a></font>'; 143: if (exists($menu_item->{'help'})) { 144: $menu_html.= 145: &Apache::loncommon::help_open_topic($menu_item->{'help'}); 146: } 147: $menu_html.='</p>'.$/; 148: } 149: $r->print($menu_html); 150: return; 151: } 152: 153: sub footer { 154: return(<<ENDFOOT); 155: </form> 156: </body> 157: </html> 158: ENDFOOT 159: 160: } 161: 162: sub first_creation_form { 163: my ($r) = @_; 164: my %lt = &Apache::lonlocal::texthash( 165: 'gmem' => 'Group membership options', 166: 'picr' => 'Pick the criteria to use to build a list of course users from which you will select members of the new group', 167: 'gdat' => 'Group open and close dates', 168: 'sten' => 'Set a start date/time and end date/time for the group', 169: 'acst' => 'Active/Inactive status', 170: 'coro' => 'Course roles', 171: 'cose' => 'Course sections', 172: 'gfun' => 'Group functionality', 173: ); 174: 175: my %status_types = ( 176: active => &mt('Currently has access'), 177: previous => &mt('Previously had access'), 178: future => &mt('Will have future access'), 179: ); 180: 181: my @roles = ('st','cc','in','ta','ep','cr'); 182: 183: my %sectioncount = (); 184: my @sections = (); 185: my $section_sel = ''; 186: my $numvisible; 187: my $numsections = &Apache::loncommon::get_sections($env{'course.'.$env{'request.course.id'}.'.domain'},$env{'course.'.$env{'request.course.id'}.'.num'},\%sectioncount); 188: 189: @sections = sort {$a cmp $b} keys(%sectioncount); 190: unshift(@sections,'all'); # Put 'all' at the front of the list 191: if ($numsections < 4) { 192: $numvisible = $numsections + 1; 193: } 194: 195: $r->print(<<"END"); 196: <b>$lt{'gmem'}</b><br/> $lt{'picr'} 197: <br /><br /> 198: <table border="0"> 199: <tr> 200: <td><b>$lt{'acst'}</b></td> 201: <td> </td> 202: <td><b>$lt{'coro'}</b></td> 203: <td> </td> 204: <td><b>$lt{'cose'}</b></td> 205: <td> </td> 206: </tr> 207: <tr> 208: <tr> 209: END 210: $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types)); 211: $r->print('<td> </td>'); 212: $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles)); 213: $r->print(<<"END"); 214: <td> </td> 215: <td align="center"> 216: <select name="sectionpick" multiple="true" size="$numvisible"> 217: $section_sel 218: </select> 219: </td> 220: </tr> 221: </table> 222: END 223: return; 224: } 225: 226: sub second_creation_form { 227: my ($r) = @_; 228: } 229: 230: sub completed_creation { 231: my ($r) = @_; 232: } 233: 234: 1;