--- loncom/interface/Attic/londropadd.pm 2005/04/07 06:56:23 1.127 +++ loncom/interface/Attic/londropadd.pm 2006/04/26 14:52:22 1.140 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.127 2005/04/07 06:56:23 albertel Exp $ +# $Id: londropadd.pm,v 1.140 2006/04/26 14:52:22 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -43,15 +43,9 @@ use Apache::lonlocal; ############################################################### ############################################################### sub header { - my $html=&Apache::lonxml::xmlbegin(); - my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); - my $title = &mt('LON-CAPA Enrollment Manager'); + my $start_page=&Apache::loncommon::start_page('Enrollment Manager'); return(<<ENDHEAD); -$html -<head> -<title>$title</title> -</head> -$bodytag +$start_page <form method="post" enctype="multipart/form-data" action="/adm/dropadd" name="studentform"> ENDHEAD @@ -137,7 +131,8 @@ sub domain_form { ############################################################### # Menu Phase One sub print_main_menu { - my ($r,$enrl_permission,$view_permission)=@_; + my ($r,$enrl_permission,$view_permission,$grp_manage_permission, + $grp_view_permission)=@_; # my ($cdom,$cnum) = split/_/,$env{'request.course.id'}; my @menu = @@ -171,6 +166,26 @@ sub print_main_menu { permission => &Apache::lonnet::auto_run($cnum,$cdom), url => '/adm/populate', }, + { text => 'Create a new group', + help => 'Course_Create_Group', + permission => $grp_manage_permission, + url => '/adm/coursegroups?refpage=enrl&action=create', + }, + { text => 'Modify an existing group', + help => 'Course_Modify_Group', + permission => $grp_manage_permission, + url => '/adm/coursegroups?refpage=enrl&action=modify', + }, + { text => 'Delete an existing group', + help => 'Course_Delete_Group', + permission => $grp_manage_permission, + url => '/adm/coursegroups?refpage=enrl&action=delete', + }, + { text => 'Enter an existing group', + help => 'Course_Display_Group', + permission => $grp_view_permission, + url => '/adm/coursegroups?refpage=enrl&action=view', + }, ); my $menu_html = ''; foreach my $menu_item (@menu) { @@ -253,8 +268,8 @@ sub print_upload_manager_header { $r->print('<input type="button" value="Reverse Association" '. 'name="'.&mt('Reverse Association').'" '. 'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); - $r->print('<input type="checkbox" name="noFirstLine" $checked />'. - &mt('Ignore First Line')); + $r->print('<label><input type="checkbox" name="noFirstLine" $checked />'. + &mt('Ignore First Line').'</label>'); $r->print("<hr />\n". '<script type="text/javascript" language="Javascript">'."\n". $javascript."\n".$javascript_validations.'</script>'); @@ -607,6 +622,7 @@ sub print_upload_manager_footer { $Str .= '<h3>'.&mt('Login Type')."</h3>\n"; $Str .= "<p>\n". &mt('Note: this will not take effect if the user already exists'). + &Apache::loncommon::help_open_topic('Auth_Options'). "</p><p>\n"; $Str .= $krbform."\n</p><p>\n". $intform."\n</p><p>\n". @@ -616,14 +632,14 @@ sub print_upload_manager_footer { $Str .= "<h3>".&mt('Starting and Ending Dates')."</h3>\n"; $Str .= "<p>\n".$date_table."</p>\n"; $Str .= "<h3>".&mt('Full Update')."</h3>\n"; - $Str .= '<input type="checkbox" name="fullup" value="yes">'. + $Str .= '<label><input type="checkbox" name="fullup" value="yes">'. ' '.&mt('Full update (also print list of users not enrolled anymore)'). - "</p>\n"; + "</label></p>\n"; $Str .= "<h3>".&mt('Student Number')."</h3>\n"; - $Str .= "<p>\n".'<input type="checkbox" name="forceid" value="yes">'; + $Str .= "<p>\n".'<label><input type="checkbox" name="forceid" value="yes">'; $Str .= &mt('Disable ID/Student Number Safeguard and Force Change '. 'of Conflicting IDs (only do if you know what you are doing)'). - "\n</p><p>\n"; + "</label>\n</p><p>\n"; $Str .= '<input type="button" onClick="javascript:verify(this.form)" '. 'value="Update Class List" />'."<br />\n"; $Str .= &mt('Note: for large courses, this operation may be time '. @@ -852,16 +868,16 @@ sub date_setting_table { my ($starttime,$endtime,$mode) = @_; my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode); my $dateDefault = '<nobr>'. - '<input type="checkbox" name="makedatesdefault" /> '. - &mt('make these dates the default for future enrollment'); + '<label><input type="checkbox" name="makedatesdefault" /> '. + &mt('make these dates the default for future enrollment').'</label>'; if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { $dateDefault = ' '; } - my $perpetual = '<nobr><input type="checkbox" name="no_end_date"'; + my $perpetual = '<nobr><label><input type="checkbox" name="no_end_date"'; if (defined($endtime) && $endtime == 0) { $perpetual .= ' checked'; } - $perpetual.= ' /> '.&mt('no ending date').'</nobr>'; + $perpetual.= ' /> '.&mt('no ending date').'</label></nobr>'; if ($mode eq 'create_enrolldates') { $perpetual = ' '; } @@ -889,7 +905,8 @@ sub make_dates_default { $result .= "Set default start and end dates for course<br />"; # # Refresh the course environment - &Apache::lonnet::coursedescription($env{'request.course.id'}); + &Apache::lonnet::coursedescription($env{'request.course.id'}, + {'freshen_cache' => 1}); } else { $result .= &mt('Unable to set default dates for course').":".$put_result. '<br />'; @@ -986,6 +1003,7 @@ sub print_enroll_single_student_form { 'psam' => "Please select an authentication mechanism", 'mail' => "Email Address" ); + my $authhelp=&Apache::loncommon::help_open_topic('Auth_Options'); $user_data_html = <<END; <h3>$lt{'udf'} $username\@$domain</h3> <table> @@ -1003,7 +1021,7 @@ sub print_enroll_single_student_form { <td><input type="text" name="emailaddress" size="20" /></td></tr> </table> <h3>$lt{'pswd'}</h3> -$lt{'psam'} +$lt{'psam'}$authhelp <table> <p> $krbform @@ -1115,8 +1133,10 @@ $date_table <p> $lt{'idsn'}: <input type="text" name="cstid" size="10"> </p><p> +<label> <input type="checkbox" name="forceid" value="yes"> $lt{'disn'} +</label> </p><p> <input type="button" onClick="verify(this.form)" value="$lt{'eas'}"> </p> @@ -1162,10 +1182,11 @@ sub print_html_classlist { $env{'form.output'} = 'html'; } # - $r->print('<br /><table border="2">'); + $r->print('<br />'.&Apache::loncommon::start_data_table()); foreach my $role (sort keys %coursepersonnel) { next if ($role =~ /^\s*$/); - $r->print('<tr><td>'.$role.'</td><td>'); + $r->print(&Apache::loncommon::start_data_table_row(). + '<td>'.$role.'</td><td>'); foreach my $user (split(',',$coursepersonnel{$role})) { my ($puname,$pudom)=split(':',$user); $r->print(' '.&Apache::loncommon::aboutmewrapper( @@ -1173,9 +1194,9 @@ sub print_html_classlist { $pudom), $puname,$pudom)); } - $r->print('</td></tr>'); + $r->print('</td>'.&Apache::loncommon::end_data_table_row()); } - $r->print('</table>'); + $r->print(&Apache::loncommon::end_data_table()); # # Interface output $r->print('<input type="hidden" name="action" value="'. @@ -1233,6 +1254,11 @@ sub show_class_list { if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) { $sortby = 'username'; } + if (! exists($env{'form.displayphotos'})) { + $env{'form.displayphotos'} = 'off'; + } + my $displayphotos = $env{'form.displayphotos'}; + # Print out header unless ($mode eq 'autoenroll') { $r->print(<<END); @@ -1241,6 +1267,7 @@ END } $r->print(<<END); <input type="hidden" name="sortby" value="$sortby" /> +<input type="hidden" name="displayphotos" value="$displayphotos" /> END if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { if ($linkto eq 'aboutme') { @@ -1255,7 +1282,8 @@ END 'sec' => "section", 'start' => "start date", 'end' => "end date", - 'type' => "enroll type/action" + 'type' => "enroll type/action", + 'photo' => "photo", ); unless ($mode eq 'autoenroll') { $r->print(<<END); @@ -1263,9 +1291,22 @@ END <input type="hidden" name="sdom" value="" /> END } + if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { + $r->print(' +<script type="text/javascript"> +function photowindow(photolink) { + var title = "Photo_Viewer"; + var options = "scrollbars=1,resizable=1,menubar=0"; + options += ",width=240,height=240"; + stdeditbrowser = open(photolink,title,options,"1"); + stdeditbrowser.focus(); +} +</script> + '); + } $r->print(" <p> -<table border=2> +".&Apache::loncommon::start_data_table()." <tr> "); if ($mode eq 'autoenroll') { @@ -1293,8 +1334,23 @@ END </th><th> <a href="javascript:document.studentform.sortby.value='end';document.studentform.submit();">$lt{'end'}</a> </th> - </tr> END + if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { + my %photo_options = &Apache::lonlocal::texthash( + 'on' => 'Show', + 'off' => 'Hide', + ); + my $photochg = 'on'; + if ($displayphotos eq 'on') { + $photochg = 'off'; + } + $r->print(' <th>'."\n".' '. + '<a href="javascript:document.studentform.displayphotos.value='. + "'".$photochg."'".';document.studentform.submit();">'. + $photo_options{$photochg}.'</a> '.$lt{'photo'}."\n". + ' </th>'."\n"); + } + $r->print(" </tr>\n"); } elsif ($mode eq 'csv') { # # Open a file @@ -1385,22 +1441,22 @@ END } else { $end = &Apache::lonlocal::locallocaltime($end); } - $r->print("<tr>\n "); + $r->print(&Apache::loncommon::start_data_table_row()); if ($mode eq 'autoenroll') { my $lockedtype = $sdata->[$index{'lockedtype'}]; $studentcount++; my $cellentry; if ($type eq 'auto') { - $cellentry = '<b>'.&mt('auto').'</b> <input type="checkbox" name="chgauto" value="'.$username.':'.$domain.'" /> Change'; + $cellentry = '<b>'.&mt('auto').'</b> <label><input type="checkbox" name="chgauto" value="'.$username.':'.$domain.'" /> Change</label>'; $autocount ++; } else { - $cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><input type="checkbox" name="chgmanual" value="'.$username.':'.$domain.'" /> Change</nobr></td></tr><tr><td><nobr>'; + $cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><label><input type="checkbox" name="chgmanual" value="'.$username.':'.$domain.'" /> Change</label></nobr></td></tr><tr><td><nobr>'; $manualcount ++; if ($lockedtype) { - $cellentry .= '<input type="checkbox" name="unlockchg" value="'.$username.':'.$domain.'" /> '.&mt('Unlock'); + $cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$username.':'.$domain.'" /> '.&mt('Unlock').'</label>'; $unlockcount ++; } else { - $cellentry .= '<input type="checkbox" name="lockchg" value="'.$username.':'.$domain.'" /> '.&mt('Lock'); + $cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$username.':'.$domain.'" /> '.&mt('Lock').'</label>'; $lockcount ++; } $cellentry .= '</nobr></td></tr></table>'; @@ -1432,8 +1488,21 @@ END <td>$section</td> <td>$start</td> <td>$end</td> - </tr> END + if ($env{'course.'.$env{'request.course.id'}. + '.internal.showphoto'}) { + if ($displayphotos eq 'on') { + my $imgurl = + &Apache::lonnet::retrievestudentphoto($domain, + $username,'gif', + 'thumbnail'); + + $r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($domain,$username,'jpg')."'".')"><img src="'.$imgurl.'" border="1"></a></td>'); + } else { + $r->print(' <td> </td> '); + } + } + $r->print(&Apache::loncommon::end_data_table_row()); } elsif ($mode eq 'csv') { next if (! defined($CSVfile)); # no need to bother with $linkto @@ -1460,16 +1529,20 @@ END $name,$section]); my $col = 5; foreach my $time ($start,$end) { - $excel_sheet->write($row,$col++, + if (defined($time) && $time != 0) { + $excel_sheet->write($row,$col++, &Apache::lonstathelpers::calc_serial($time), $format->{'date'}); + } else { + $excel_sheet->write($row,$col++,'none'); + } } $excel_sheet->write($row,$col++,$status); $row++; } } if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { - $r->print('</table><br>'); + $r->print(&Apache::loncommon::end_data_table().'<br />'); } elsif ($mode eq 'excel') { $excel_workbook->close(); $r->print('<p><a href="'.$excel_filename.'">'. @@ -1509,7 +1582,7 @@ sub print_modify_student_form { '<p>'. &mt('Unable to retrieve environment data for').' '.$sname. &mt('in domain').' '.$sdom.'</p><p>'. - &mt('Please contact your LON-CAPA administrator regarding this situation.').'</p></body></html>'); + &mt('Please contact your LON-CAPA administrator regarding this situation.').'</p>'.&Apache::loncommon::end_page()); return; } # determine the students starting and ending times and section @@ -1588,16 +1661,18 @@ $info{'lastname'} $info{'generation'}, $ </p><p> <b>$lt{'sid'}</b>: <input type="text" name="id" value="$info{'id'}" size="12"/> </p><p> +<label> <input type="checkbox" name="forceid" > $lt{'disn'} +</label> </p><p> <b>$lt{'sec'}</b>: <input type="text" name="section" value="$section" size="14"/> </p> <p>$current_date_description</p> <p>$date_table</p> <input type="submit" value="$lt{'sm'}" /> -</body></html> END + $r->print(&Apache::loncommon::end_page()); return; } @@ -1605,7 +1680,7 @@ END # modify a single students section # sub modify_single_student { - my $r = shift; + my ($r) = @_; # # Remove non alphanumeric values from the section $env{'form.section'} =~ s/\W//g; @@ -1747,8 +1822,8 @@ END <input type="hidden" name="sortby" value="$sortby" /> <input type="hidden" name="Status" value="$status" /> <a href="javascript:document.studentform.submit();">$Masd</a> -</body></html> END + $r->print(&Apache::loncommon::end_page()); return; } @@ -1851,8 +1926,8 @@ my %lt=&Apache::lonlocal::texthash('usrn 'end' => "end date", ); if ($nosort) { + $r->print(&Apache::loncommon::start_data_table()); $r->print(<<END); -<table border=2> <tr> <th> </th> <th>$lt{'usrn'}</th> @@ -1866,8 +1941,8 @@ my %lt=&Apache::lonlocal::texthash('usrn END } else { + $r->print(&Apache::loncommon::start_data_table()); $r->print(<<END); -<table border=2> <tr><th> </th> <th> <a href="/adm/dropadd?action=$action&sortby=username">$lt{'usrn'}</a> @@ -1927,8 +2002,8 @@ END my $status = $sdata->[$index{'status'}]; next if ($status ne 'Active'); # + $r->print(&Apache::loncommon::start_data_table_row()); $r->print(<<"END"); -<tr> <td><input type="checkbox" name="droplist" value="$student"></td> <td>$username</td> <td>$domain</td> @@ -1937,10 +2012,10 @@ END <td>$section</td> <td>$start</td> <td>$end</td> -</tr> END + $r->print(&Apache::loncommon::end_data_table_row()); } - $r->print('</table><br>'); + $r->print(&Apache::loncommon::end_data_table().'<br />'); %lt=&Apache::lonlocal::texthash( 'dp' => "Drop Students", 'ca' => "check all", @@ -1969,15 +2044,15 @@ sub print_first_courselist_upload_form { $str .= "<p>\n"; $str .= '<input type="submit" name="fileupload" value="'. &mt('Upload class list').'">'."\n"; - $str .= '<input type="checkbox" name="noFirstLine" /> '. - &mt('Ignore First Line')."</p>\n"; + $str .= '<label><input type="checkbox" name="noFirstLine" /> '. + &mt('Ignore First Line')."</label></p>\n"; $str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", &mt("How do I create a class list from a spreadsheet")). "<br />\n"; $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", &mt("How do I create a CSV file from a spreadsheet")). "<br />\n"; - $str .= "</body>\n</html>\n"; + $str .= &Apache::loncommon::end_page(); $r->print($str); return; } @@ -2033,7 +2108,7 @@ sub upfile_drop_add { if (! exists($home_servers{$desiredhost})) { $r->print('<font color="#ff0000">'.&mt('Error').'</font>'. &mt('Invalid home server specified')); - $r->print("</body>\n</html>\n"); + $r->print(&Apache::loncommon::end_page()); return; } } @@ -2208,12 +2283,7 @@ sub upfile_drop_add { sub drop_student_list { my $r=shift; my $count=0; - my @droplist; - if (ref($env{'form.droplist'})) { - @droplist = @{$env{'form.droplist'}}; - } else { - @droplist = ($env{'form.droplist'}); - } + my @droplist = &Apache::loncommon::get_env_multiple('form.droplist'); foreach (@droplist) { my ($uname,$udom)=split(/\:/,$_); # drop student @@ -2284,7 +2354,8 @@ sub handler { if (! ($env{'request.course.fn'})) { # Not in a course $env{'user.error.msg'}= - "/adm/dropadd:cst:0:0:Cannot drop or add students"; + "/adm/dropadd:cst:0:0:Cannot manage or view course groups, ". + "or drop or add students"; return HTTP_NOT_ACCEPTABLE; } # @@ -2292,11 +2363,21 @@ sub handler { &Apache::lonnet::allowed('vcl',$env{'request.course.id'}); my $enrl_permission = &Apache::lonnet::allowed('cst',$env{'request.course.id'}); - if (! $view_permission && ! $enrl_permission) { + + my $grp_view_permission = + &Apache::lonnet::allowed('vcg',$env{'request.course.id'}); + my $grp_manage_permission = + &Apache::lonnet::allowed('mdg',$env{'request.course.id'}); + + + if (! $grp_view_permission && ! $grp_manage_permission && + ! $view_permission && ! $enrl_permission) { $env{'user.error.msg'}= - "/adm/dropadd:cst:0:0:Cannot drop or add students"; - return HTTP_NOT_ACCEPTABLE; + "/adm/coursegroups:cst:0:0:Cannot manage or view course groups, ". + "or drop or add students"; + return HTTP_NOT_ACCEPTABLE; } + # # Only output the header information if they did not request csv format # @@ -2309,7 +2390,8 @@ sub handler { if (! exists($env{'form.action'})) { $r->print(&Apache::lonhtmlcommon::breadcrumbs (undef,'Enrollment Manager')); - &print_main_menu($r,$enrl_permission,$view_permission); + &print_main_menu($r,$enrl_permission,$view_permission,$grp_manage_permission, + $grp_view_permission); } elsif ($env{'form.action'} eq 'upload' && $enrl_permission) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/dropadd?action=upload&state=', @@ -2398,7 +2480,7 @@ sub handler { } # # Finish up - $r->print('</form></body></html>'); + $r->print('</form>'.&Apache::loncommon::end_page()); return OK; }