version 1.431, 2009/02/15 15:14:34
|
version 1.437, 2009/03/01 03:33:29
|
Line 973 sub print_row {
|
Line 973 sub print_row {
|
if ($parmlev eq 'full') { |
if ($parmlev eq 'full') { |
$r->print('<td style="background-color:'.$defbgtwo.';" align="center">' |
$r->print('<td style="background-color:'.$defbgtwo.';" align="center">' |
.$$part{$which}.'</td>'); |
.$$part{$which}.'</td>'); |
} else { |
} else { |
$parm=~s|\[.*\]\s||g; |
$parm=~s|\[.*\]\s||g; |
$parm=&mt($parm); |
|
} |
} |
my $automatic=&rulescache(($which=~/\_([^\_]+)$/)[0].'_triggers'); |
my $automatic=&rulescache(($which=~/\_([^\_]+)$/)[0].'_triggers'); |
if ($automatic) { |
if ($automatic) { |
Line 1077 sub print_td {
|
Line 1076 sub print_td {
|
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
$r->print('<td style="background-color:'.(($result==$which)?'#AAFFAA':$defbg). |
$r->print('<td style="background-color:'.(($result==$which)?'#AAFFAA':$defbg). |
';" align="center">'); |
';" align="center">'); |
if ($which<11 || $which > 12) { |
my $nolink = 0; |
$r->print(&plink($$typeoutpar[$which], |
if ($which == 11 || $which == 12) { |
$$display{$value},$$outpar[$which], |
$nolink = 1; |
$mprefix."$which",'parmform.pres','psub')); |
} elsif ($mprefix =~ /availablestudent\&$/) { |
|
if ($which > 3) { |
|
$nolink = 1; |
|
} |
|
} |
|
if ($nolink) { |
|
$r->print(&valout($$outpar[$which],$$typeoutpar[$which])); |
} else { |
} else { |
$r->print(&valout($$outpar[$which],$$typeoutpar[$which])); |
$r->print(&plink($$typeoutpar[$which], |
|
$$display{$value},$$outpar[$which], |
|
$mprefix."$which",'parmform.pres','psub')); |
} |
} |
$r->print('</td>'."\n"); |
$r->print('</td>'."\n"); |
} |
} |
Line 1183 sub extractResourceInformation {
|
Line 1190 sub extractResourceInformation {
|
# |
# |
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) { |
if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) { |
my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
my ($display,$parmdis); |
my $parmdis = $display; |
$display = &standard_parameter_names($name); |
$parmdis =~ s/\s*\[Part.*$//g; |
if ($display eq '') { |
|
$display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
|
$parmdis = $display; |
|
$parmdis =~ s/\s*\[Part.*$//g; |
|
} else { |
|
$parmdis = $display; |
|
} |
$$allparms{$name}=$parmdis; |
$$allparms{$name}=$parmdis; |
if (ref($defkeytype)) { |
if (ref($defkeytype)) { |
$$defkeytype{$name}= |
$$defkeytype{$name}= |
Line 1317 ENDSCRIPT
|
Line 1330 ENDSCRIPT
|
if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { |
if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { |
$r->print(' checked="checked"'); |
$r->print(' checked="checked"'); |
} |
} |
my $displaykey = &standard_parameter_names($tempkey); |
$r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey} |
if ($displaykey eq '') { |
: $tempkey) |
if ($$allparms{$tempkey}=~/\S/) { |
.'</label></td>'); |
$displaykey = $$allparms{$tempkey}; |
|
} else { |
|
$displaykey = $tempkey; |
|
} |
|
} |
|
$r->print(' />'.$displaykey.'</label></td>'); |
|
$cnt++; |
$cnt++; |
if ($cnt==3) { |
if ($cnt==3) { |
$r->print("</tr>\n<tr>"); |
$r->print("</tr>\n<tr>"); |
Line 1798 sub assessparms {
|
Line 1805 sub assessparms {
|
my @values=split(/\&\&\&/,$env{'form.pres_value'}); |
my @values=split(/\&\&\&/,$env{'form.pres_value'}); |
my @types=split(/\&\&\&/,$env{'form.pres_type'}); |
my @types=split(/\&\&\&/,$env{'form.pres_type'}); |
for (my $i=0;$i<=$#markers;$i++) { |
for (my $i=0;$i<=$#markers;$i++) { |
|
if ($markers[$i] =~ /^[\d.]+\&0_availablestudent\&(1|2|3)$/) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my (@ok_slots,@fail_slots,@del_slots); |
|
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); |
|
my ($level,@all) = |
|
&parmval_by_symb('0.availablestudent',$pssymb,'',$uname,$udom, |
|
$csec,$cgroup,$courseopt); |
|
foreach my $slot_name (split(/:/,$values[$i])) { |
|
next if ($slot_name eq ''); |
|
if (&update_slots($slot_name,$cdom,$cnum,$pssymb,$uname,$udom) eq 'ok') { |
|
push(@ok_slots,$slot_name); |
|
|
|
} else { |
|
push(@fail_slots,$slot_name); |
|
} |
|
} |
|
if (@ok_slots) { |
|
$values[$i] = join(':',@ok_slots); |
|
} else { |
|
$values[$i] = ''; |
|
} |
|
if ($all[$level] ne '') { |
|
my @existing = split(/:/,$all[$level]); |
|
foreach my $slot_name (@existing) { |
|
if (!grep(/^\Q$slot_name\E$/,split(/:/,$values[$i]))) { |
|
if (&delete_slots($slot_name,$cdom,$cnum,$uname,$udom,$pssymb) eq 'ok') { |
|
push(@del_slots,$slot_name); |
|
} |
|
} |
|
} |
|
} |
|
} |
$message.=&storeparm(split(/\&/,$markers[$i]), |
$message.=&storeparm(split(/\&/,$markers[$i]), |
$values[$i], |
$values[$i], |
$types[$i], |
$types[$i], |
Line 1977 ENDTABLEHEADFOUR
|
Line 2017 ENDTABLEHEADFOUR
|
if (grep $_ eq $tempkeyp, @catmarker) { |
if (grep $_ eq $tempkeyp, @catmarker) { |
$part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); |
$part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); |
$name{$_}=&Apache::lonnet::metadata($uri,$_.'.name'); |
$name{$_}=&Apache::lonnet::metadata($uri,$_.'.name'); |
$display{$_}=&Apache::lonnet::metadata($uri,$_.'.display'); |
my $parmdis=&Apache::lonnet::metadata($uri,$_.'.display'); |
|
if ($allparms{$name{$_}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$_} = $allparms{$name{$_}}.$identifier; |
|
} else { |
|
$display{$_} = $parmdis; |
|
} |
unless ($display{$_}) { $display{$_}=''; } |
unless ($display{$_}) { $display{$_}=''; } |
$display{$_}.=' ('.$name{$_}.')'; |
$display{$_}.=' ('.$name{$_}.')'; |
$default{$_}=&Apache::lonnet::metadata($uri,$_); |
$default{$_}=&Apache::lonnet::metadata($uri,$_); |
Line 2084 ENDTABLEHEADFOUR
|
Line 2133 ENDTABLEHEADFOUR
|
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
$part{$tempkeyp}="0"; |
$part{$tempkeyp}="0"; |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
|
if ($allparms{$name{$tempkeyp}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier; |
|
} else { |
|
$display{$tempkeyp} = $parmdis; |
|
} |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
Line 2177 ENDTABLEHEADFOUR
|
Line 2235 ENDTABLEHEADFOUR
|
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { |
$part{$tempkeyp}="0"; |
$part{$tempkeyp}="0"; |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); |
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display'); |
|
if ($allparms{$name{$tempkeyp}} ne '') { |
|
my $identifier; |
|
if ($parmdis =~ /(\s*\[Part.*)$/) { |
|
$identifier = $1; |
|
} |
|
$display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier; |
|
} else { |
|
$display{$tempkeyp} = $parmdis; |
|
} |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; } |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')'; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
$display{$tempkeyp} =~ s/_\w+_/_0_/; |
Line 2242 sub crsenv {
|
Line 2309 sub crsenv {
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
my (%crsinfo,$chome); |
my (%crsinfo,$chome); |
|
my $crstype = &Apache::loncommon::course_type(); |
|
|
# |
# |
# Go through list of changes |
# Go through list of changes |
Line 2252 sub crsenv {
|
Line 2320 sub crsenv {
|
if ($name eq 'newp') { |
if ($name eq 'newp') { |
$name = $env{'form.newp_name'}; |
$name = $env{'form.newp_name'}; |
} |
} |
|
if ($name =~ /^rolenames_([^_]+)$/) { |
|
$name = $1.'.plaintext'; |
|
my $standardtitle = |
|
&Apache::lonnet::plaintext($1,$crstype,$env{'request.course.id'},1); |
|
my %adv_roles = |
|
&Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1); |
|
if ($value ne '') { |
|
foreach my $role (keys(%adv_roles)) { |
|
if ($role =~ m{^cr/$match_domain/$match_name/\Q$value\E$}) { |
|
$setoutput.= '<span class="LC_error">'. |
|
&mt('Requested replacement title for [_1] role is already used as the name of a custom role ([_2]).',$standardtitle,$value). |
|
'</span><br />'; |
|
undef($value); |
|
} |
|
} |
|
} |
|
} |
if ($name eq 'url') { |
if ($name eq 'url') { |
$value=~s/^\/res\///; |
$value=~s/^\/res\///; |
my $bkuptime=time; |
my $bkuptime=time; |
Line 2474 sub crsenv {
|
Line 2559 sub crsenv {
|
.'('.&mt("[_1] for link to each a listing of each student's files.",'"<tt>yes</tt>"').')', |
.'('.&mt("[_1] for link to each a listing of each student's files.",'"<tt>yes</tt>"').')', |
'student_classlist_opt_in' => '<b>'.&mt("Student's agreement needed for listing in student-viewable roster").'</b><br />' |
'student_classlist_opt_in' => '<b>'.&mt("Student's agreement needed for listing in student-viewable roster").'</b><br />' |
.'('.&mt('[_1] to require students to opt-in to listing in the roster (on the roster page).','"<tt>yes</tt>"').')', |
.'('.&mt('[_1] to require students to opt-in to listing in the roster (on the roster page).','"<tt>yes</tt>"').')', |
'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').'</b><br />' |
'plc.roles.denied'=> '<b>'.&mt('Disallow chat room use for Roles').'</b><br />' |
.'('.&mt('[_1]: student, [_2]: TA, [_3]: instructor','"<tt>st</tt>"','"<tt>ta</tt>"','"<tt>in</tt>"').')<br />' |
.'('.&mt('[_1]: student, [_2]: TA, [_3]: instructor','"<tt>st</tt>"','"<tt>ta</tt>"','"<tt>in</tt>"').')<br />' |
.'("<tt>'.&mt('role,role,...').'</tt>") ' |
.'("<tt>'.&mt('role,role,...').'</tt>") ' |
.Apache::loncommon::help_open_topic("Course_Disable_Discussion"), |
.Apache::loncommon::help_open_topic("Course_Disable_Discussion"), |
'plc.users.denied' => |
'plc.users.denied' => |
'<b>'.&mt('Disallow live chatroom use for Users').'</b><br />'. |
'<b>'.&mt('Disallow chat room use for Users').'</b><br />'. |
'("<tt>'.&mt('user:domain,user:domain,...').'</tt>")', |
'("<tt>'.&mt('user:domain,user:domain,...').'</tt>")', |
|
|
'pch.roles.denied'=> '<b>'.&mt('Disallow Resource Discussion for Roles').'</b><br />' |
'pch.roles.denied'=> '<b>'.&mt('Disallow Resource Discussion for Roles').'</b><br />' |
Line 2554 sub crsenv {
|
Line 2639 sub crsenv {
|
'externalsyllabus' |
'externalsyllabus' |
=> '<b>'.&mt('URL of Syllabus (not using internal handler)').'</b>', |
=> '<b>'.&mt('URL of Syllabus (not using internal handler)').'</b>', |
'tthoptions' |
'tthoptions' |
=> '<b>'.&mt('Default set of options to pass to tth/m when converting tex').'</b>', |
=> '<b>'.&mt('Default set of options to pass to tth/m when converting TeX').'</b>', |
|
|
'texengine' |
'texengine' |
=> '<b>'.&mt('Force all students in the course to use a specific math rendering engine.').'</b><br />' |
=> '<b>'.&mt('Force all students in the course to use a specific math rendering engine.').'</b><br />' |
Line 2573 sub crsenv {
|
Line 2658 sub crsenv {
|
&mt('Display Categories').'</a>', |
&mt('Display Categories').'</a>', |
'datelocale' |
'datelocale' |
=> '<b>'.&mt('Locale used for course calendar').'</b>', |
=> '<b>'.&mt('Locale used for course calendar').'</b>', |
|
'rolenames' |
|
=> '<b>'.&mt('Replacement titles for standard course roles').'</b><br />'. |
|
'('.&mt('To replace the standard title for a course role, enter the title you wish to use, otherwise leave blank.').')', |
); |
); |
my @Display_Order = ('url','description','courseid','cloners'); |
my @Display_Order = ('url','description','courseid','cloners'); |
(my $can_toggle_cat,$can_categorize) = &can_modify_catsettings($dom); |
(my $can_toggle_cat,$can_categorize) = &can_modify_catsettings($dom); |
Line 2597 sub crsenv {
|
Line 2685 sub crsenv {
|
'languages', |
'languages', |
'timezone', |
'timezone', |
'datelocale', |
'datelocale', |
|
'rolenames', |
'nothideprivileged', |
'nothideprivileged', |
'rndseed', |
'rndseed', |
'receiptalg', |
'receiptalg', |
Line 2620 sub crsenv {
|
Line 2709 sub crsenv {
|
foreach my $parameter (sort(keys(%values))) { |
foreach my $parameter (sort(keys(%values))) { |
unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || |
unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || |
($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) |
($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) |
|| ($parameter eq 'type')) { |
|| ($parameter eq 'type') || |
|
($parameter =~ m/^(cc|in|ta|ep|ad|st)\.plaintext$/)) { |
if (! $descriptions{$parameter}) { |
if (! $descriptions{$parameter}) { |
$descriptions{$parameter}=$parameter; |
$descriptions{$parameter}=$parameter; |
push(@Display_Order,$parameter); |
push(@Display_Order,$parameter); |
Line 2660 sub crsenv {
|
Line 2750 sub crsenv {
|
$output .= '<td>'. |
$output .= '<td>'. |
&Apache::loncommon::select_datelocale($parameter.'_value', |
&Apache::loncommon::select_datelocale($parameter.'_value', |
$currdatelocale, |
$currdatelocale, |
$onchange,$includeempty).'</td>'; |
$onchange,$includeempty).'</td>'; |
|
} elsif ($parameter eq 'rolenames') { |
|
$output.= '<td><table>'; |
|
foreach my $role ('cc','in','ta','ep','ad','st') { |
|
my $onchange = 'onFocus="javascript:window.document.forms'. |
|
"['envform'].elements['". |
|
$parameter.'_'.$role."_setparmval']". |
|
'.checked=true;"'; |
|
$output.= '<tr><td>'.&Apache::lonnet::plaintext($role,$crstype,undef,1). |
|
'</td><td>'. |
|
&Apache::lonhtmlcommon::textbox($parameter.'_'.$role.'_value', |
|
$values{$role.'.plaintext'}, |
|
15,$onchange). |
|
'</td></tr>'; |
|
} |
|
$output .= '</table></td><td><table>'; |
|
foreach my $role ('cc','in','ta','ep','ad','st') { |
|
$output .= '<tr><td>'.&Apache::lonhtmlcommon::checkbox($parameter.'_'.$role.'_setparmval'). |
|
'</td></tr>'; |
|
} |
|
$output .= '</table></td>'; |
} elsif ($parameter eq 'categories') { |
} elsif ($parameter eq 'categories') { |
my $catdisplay; |
my $catdisplay; |
if ($values{'categories'} ne '') { |
if ($values{'categories'} ne '') { |
Line 2682 sub crsenv {
|
Line 2792 sub crsenv {
|
$values{$parameter}, |
$values{$parameter}, |
40,$onchange).'</td>'; |
40,$onchange).'</td>'; |
} |
} |
$output .= '<td>'. |
unless ($parameter eq 'rolenames') { |
&Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). |
$output .= '<td>'. |
'</td>'; |
&Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). |
|
'</td>'; |
|
} |
$output .= &Apache::loncommon::end_data_table_row()."\n"; |
$output .= &Apache::loncommon::end_data_table_row()."\n"; |
} |
} |
my $onchange = 'onFocus="javascript:window.document.forms'. |
my $onchange = 'onFocus="javascript:window.document.forms'. |
Line 4571 sub parm_change_log {
|
Line 4683 sub parm_change_log {
|
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
} |
} |
|
|
|
sub update_slots { |
|
my ($slot_name,$cdom,$cnum,$symb,$uname,$udom) = @_; |
|
my %slot=&Apache::lonnet::get_slot($slot_name); |
|
if (!keys(%slot)) { |
|
return 'error: slot does not exist'; |
|
} |
|
my $max=$slot{'maxspace'}; |
|
if (!defined($max)) { $max=99999; } |
|
|
|
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, |
|
"^$slot_name\0"); |
|
my ($tmp)=%consumed; |
|
if ($tmp=~/^error: 2 / ) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
my $last=0; |
|
foreach my $key (keys(%consumed)) { |
|
my $num=(split('\0',$key))[1]; |
|
if ($num > $last) { $last=$num; } |
|
if ($consumed{$key}->{'name'} eq $uname.':'.$udom) { |
|
return 'ok'; |
|
} |
|
} |
|
|
|
if (scalar(keys(%consumed)) >= $max) { |
|
return 'error: no space left in slot'; |
|
} |
|
my $wanted=$last+1; |
|
|
|
my %reservation=('name' => $uname.':'.$udom, |
|
'timestamp' => time, |
|
'symb' => $symb); |
|
|
|
my $success=&Apache::lonnet::newput('slot_reservations', |
|
{"$slot_name\0$wanted" => |
|
\%reservation}, |
|
$cdom, $cnum); |
|
return $success; |
|
} |
|
|
|
sub delete_slots { |
|
my ($slot_name,$cdom,$cnum,$uname,$udom,$symb) = @_; |
|
my $delresult; |
|
my %consumed = &Apache::lonnet::dump('slot_reservations',$cdom, |
|
$cnum, "^$slot_name\0"); |
|
if (&Apache::lonnet::error(%consumed)) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
my ($tmp)=%consumed; |
|
if ($tmp=~/^error: 2 /) { |
|
return 'error: unable to determine current slot status'; |
|
} |
|
foreach my $key (keys(%consumed)) { |
|
if ($consumed{$key}->{'name'} eq $uname.':'.$udom) { |
|
my $num=(split('\0',$key))[1]; |
|
my $entry = $slot_name.'\0'.$num; |
|
$delresult = &Apache::lonnet::del('slot_reservations',[$entry], |
|
$cdom,$cnum); |
|
if ($delresult eq 'ok') { |
|
my %storehash = ( |
|
symb => $symb, |
|
slot => $slot_name, |
|
action => 'release', |
|
context => 'parameter', |
|
); |
|
&Apache::lonnet::instructor_log('slotreservationslog',\%storehash, |
|
1,$uname,$udom,$cnum,$cdom); |
|
} |
|
} |
|
} |
|
return $delresult; |
|
} |
|
|
sub check_for_course_info { |
sub check_for_course_info { |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
return 1 if ($navmap); |
return 1 if ($navmap); |