--- loncom/interface/lonuserutils.pm 2010/01/20 20:31:19 1.97.2.7 +++ loncom/interface/lonuserutils.pm 2010/02/02 06:05:03 1.97.2.15 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.97.2.7 2010/01/20 20:31:19 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.97.2.15 2010/02/02 06:05:03 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -386,8 +386,7 @@ sub javascript_validations { if (($context eq 'course') || ($context eq 'domain')) { if ($context eq 'course') { if ($env{'request.course.sec'} eq '') { - $setsection_call = 'setSections(document.'.$param{'formname'}."'$crstype'".');'; - + $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');'; $setsections_js = &setsections_javascript($param{'formname'},$groupslist, $mode,'',$crstype); @@ -1142,7 +1141,7 @@ sub date_setting_table { } sub make_dates_default { - my ($startdate,$enddate,$context,$crstype = @_; + my ($startdate,$enddate,$context,$crstype) = @_; my $result = ''; if ($context eq 'course') { my ($cnum,$cdom) = &get_course_identity(); @@ -1449,8 +1448,12 @@ sub print_userlist { } if (!(($context eq 'domain') && (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { - $r->print(' '.&list_submit_button(&mt('Update Display')). - "\n</p>\n"); + $r->print( + "\n</p>\n" + .'<p>' + .&list_submit_button(&mt('Update Display')) + ."</p>\n" + ); } my ($indexhash,$keylist) = &make_keylist_array(); my (%userlist,%userinfo,$clearcoursepick); @@ -1728,7 +1731,7 @@ sub section_group_filter { } if (@options > 0) { my $currsel; - $markup = '<select name="'.$name{$item}.'" />'."\n"; + $markup = '<select name="'.$name{$item}.'">'."\n"; foreach my $option ('all','none',@options) { $currsel = ''; if ($env{'form.'.$name{$item}} eq $option) { @@ -1743,7 +1746,9 @@ sub section_group_filter { $markup .= '</option>'."\n"; } $markup .= '</select>'."\n"; - $output .= (' 'x3).'<label>'.$title{$item}.': '.$markup.'</label>'; + $output .= (' 'x3).'<span class="LC_nobreak">' + .'<label>'.$title{$item}.': '.$markup.'</label>' + .'</span> '; } } return $output; @@ -1963,13 +1968,17 @@ sub process_coursepick { my $coursefilter = $env{'form.coursepick'}; my $cdom = $env{'request.role.domain'}; my %courses; + my $crssrch = 'Course'; + if ($env{'form.roletype'} eq 'community') { + $crssrch = 'Community'; + } if ($coursefilter eq 'all') { %courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.', - undef,undef,'Course'); + undef,undef,$crssrch); } elsif ($coursefilter eq 'category') { my $instcode = &instcode_from_coursefilter(); %courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.', - undef,undef,'Course'); + undef,undef,$crssrch); } elsif ($coursefilter eq 'specific') { if ($env{'form.coursetotal'} > 1) { my @course_ids = split(/&&/,$env{'form.courselist'}); @@ -2154,7 +2163,7 @@ END } elsif ($context eq 'domain') { if ($setting eq 'community') { $crstype = 'Community'; - } elsif ($crstype eq 'course') { + } elsif ($setting eq 'course') { $crstype = 'Course'; } } @@ -2306,7 +2315,11 @@ END if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { if ($permission->{'cusr'}) { - $actionselect = &select_actions($context,$setting,$statusmode,$formname); + unless (($context eq 'domain') && + (($setting eq 'course') || ($setting eq 'community'))) { + $actionselect = + &select_actions($context,$setting,$statusmode,$formname); + } } $r->print(<<END); <input type="hidden" name="srchby" value="uname" /> @@ -2399,11 +2412,7 @@ END <th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> "; } else { - if ($mode eq 'pickauthor') { - $output .= "\n".'<th> </th>'."\n"; - } else { - $output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; - } + $output .= "\n".'<th> </th>'."\n"; if ($actionselect) { $output .= '<th>'.&mt('Select').'</th>'."\n"; } @@ -2458,9 +2467,13 @@ END time.'_'.rand(1000000000).'.csv'; unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { $r->log_error("Couldn't open $CSVfilename for output $!"); - $r->print(&mt('Problems occurred in writing the CSV file. ' - .'This error has been logged. ' - .'Please alert your LON-CAPA administrator.')); + $r->print( + '<p class="LC_error">' + .&mt('Problems occurred in writing the CSV file.') + .' '.&mt('This error has been logged.') + .' '.&mt('Please alert your LON-CAPA administrator.') + .'</p>' + ); $CSVfile = undef; } # @@ -2929,7 +2942,7 @@ sub print_username_link { $output = $in->{'username'}; } else { $output = '<a href="javascript:username_display_launch('. - "'$in->{'username'}','$in->{'domain'}'".')" />'. + "'$in->{'username'}','$in->{'domain'}'".')">'. $in->{'username'}.'</a>'; } return $output; @@ -3653,14 +3666,13 @@ sub print_first_users_upload_form { $str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; # Excel and CSV Help - $str .= '<p>' + $str .= '<div class="LC_left_float">' .&Apache::loncommon::help_open_topic("Course_Create_Class_List", &mt("How do I create a users list from a spreadsheet")) - ."<br />\n" + .'</div><div class="LC_left_float">'."\n" .&Apache::loncommon::help_open_topic("Course_Convert_To_CSV", &mt("How do I create a CSV file from a spreadsheet")) - ."</p>\n"; - + .'</div><br clear="all" />'."\n"; $str .= &Apache::lonhtmlcommon::start_pick_box() .&Apache::lonhtmlcommon::row_title(&mt('File')) .&Apache::loncommon::upfile_select_html() @@ -3677,8 +3689,6 @@ sub print_first_users_upload_form { .'<input type="submit" name="fileupload" value="'.&mt('Next').'" />' .'</p>'; - $str .= &Apache::loncommon::end_page(); - $r->print($str); return; } @@ -3740,7 +3750,7 @@ sub upfile_drop_add { } my ($startdate,$enddate) = &get_dates_from_form(); if ($env{'form.makedatesdefault'}) { - $r->print(&make_dates_default($startdate,$enddate,$context,$crstype); + $r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); } # Determine domain and desired host (home server) my $defdom=$env{'request.role.domain'}; @@ -4818,16 +4828,21 @@ sub setsections_javascript { plch => 'Please choose a different section name.', mnot => 'may not be used as a section name, as it is the name of a course group.', secn => 'Section names and group names must be distinct. Please choose a different section name.', + nonw => 'Section names may only contain letters or numbers.', ); $setsection_js .= <<"ENDSECCODE"; function setSections(formname,crstype) { var re1 = /^currsec_/; + var re2 =/\\W/; + var trimleading = /^\\s+/; + var trimtrailing = /\\s+\$/; var groups = new Array($groupslist); for (var i=0;i<formname.elements.length;i++) { var str = formname.elements[i].name; var checkcurr = str.match(re1); if (checkcurr != null) { + var num = i; if ($checkincluded) { $rolecode if (role == 'cc' || role == 'co') { @@ -4839,38 +4854,60 @@ function setSections(formname,crstype) { } else { var sections = ''; var numsec = 0; - var sections; - for (var j=0; j<formname.elements[i].length; j++) { - if (formname.elements[i].options[j].selected == true ) { - if (formname.elements[i].options[j].value != "") { + var fromexisting = new Array(); + for (var j=0; j<formname.elements[num].length; j++) { + if (formname.elements[num].options[j].selected == true ) { + var addsec = formname.elements[num].options[j].value; + if (addsec != "") { + fromexisting.push(addsec); if (numsec == 0) { - if (formname.elements[i].options[j].value != "") { - sections = formname.elements[i].options[j].value; - numsec ++; - } - } - else { - sections = sections + "," + formname.elements[i].options[j].value - numsec ++; + sections = addsec; + } else { + sections = sections + "," + addsec; } + numsec ++; } } } - if (numsec > 0) { - if (formname.elements[i+1].value != "" && formname.elements[i+1].value != null) { - sections = sections + "," + formname.elements[i+1].value; - } - } - else { - sections = formname.elements[i+1].value; - } - var newsecs = formname.elements[i+1].value; - var numsplit; + var newsecs = formname.elements[num+1].value; + var validsecs = new Array(); + var validsecstr = ''; + var badsecs = new Array(); if (newsecs != null && newsecs != "") { - numsplit = newsecs.split(/,/g); - numsec = numsec + numsplit.length; + var numsplit; + if (newsecs.indexOf(',') == -1) { + numsplit = new Array(newsecs); + } else { + numsplit = newsecs.split(/,/g); + } + for (var i=0; i<numsplit.length; i++) { + var newsec = numsplit[i]; + newsec = newsec.replace(trimleading,''); + newsec = newsec.replace(trimtrailing,''); + if (re2.test(newsec) == true) { + badsecs.push(newsec); + } else { + if (newsec != '') { + var isnew = 1; + if (fromexisting != null) { + for (var m=0; m<fromexisting.length; m++) { + if (newsec == fromexisting[m]) { + isnew = 0; + } + } + } + if (isnew == 1) { + validsecs.push(newsec); + } + } + } + } + if (badsecs.length > 0) { + alert("$alerts{'nonw'}\\n$alerts{'plch'}"); + return; + } + numsec = numsec + validsecs.length; } - if ((role == 'st') && (numsec > 1)) { if (crstype == 'Community') { alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); @@ -4878,25 +4915,36 @@ function setSections(formname,crstype) { alert("$alerts{'inco'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); } return; - } - else { - if (numsplit != null) { - for (var j=0; j<numsplit.length; j++) { - if ((numsplit[j] == 'all') || - (numsplit[j] == 'none')) { - alert("'"+numsplit[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}"); + } else { + if (validsecs != null) { + for (var j=0; j<validsecs.length; j++) { + if (validsecstr == '' || validsecstr == null) { + validsecstr = validsecs[j]; + } else { + validsecstr += ','+validsecs[j]; + } + if ((validsecs[j] == 'all') || + (validsecs[j] == 'none')) { + alert("'"+validsecs[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}"); return; } for (var k=0; k<groups.length; k++) { - if (numsplit[j] == groups[k]) { - alert("'"+numsplit[j]+"' $alerts{'mnot'}\\n$alerts{'secn'}"); + if (validsecs[j] == groups[k]) { + alert("'"+validsecs[j]+"' $alerts{'mnot'}\\n$alerts{'secn'}"); return; } } } } - formname.elements[i+2].value = sections; } + if ((validsecstr != '') && (validsecstr != null)) { + if (numsec > 0) { + sections = sections + "," + validsecstr; + } else { + sections = validsecstr; + } + } + formname.elements[num+2].value = sections; } } }