version 1.331, 2006/08/09 21:11:34
|
version 1.350.2.4, 2007/01/06 14:52:30
|
Line 65 use Apache::lonlocal;
|
Line 65 use Apache::lonlocal;
|
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::longroup; |
use Apache::longroup; |
use Apache::lonrss; |
use Apache::lonrss; |
use LONCAPA; |
use LONCAPA qw(:DEFAULT :match); |
|
|
# --- Caches local to lonparmset |
# --- Caches local to lonparmset |
|
|
Line 122 sub parmval_by_symb {
|
Line 122 sub parmval_by_symb {
|
# load caches |
# load caches |
&cacheparmhash(); |
&cacheparmhash(); |
|
|
my $useropt=&Apache::lonnet::get_userresdata($uname,$udom); |
my $useropt; |
|
if ($uname ne '' && $udom ne '') { |
|
$useropt = &Apache::lonnet::get_userresdata($uname,$udom); |
|
} |
|
|
my $result=''; |
my $result=''; |
my @outpar=(); |
my @outpar=(); |
Line 173 sub parmval_by_symb {
|
Line 176 sub parmval_by_symb {
|
} |
} |
|
|
# ------------------------------------------------------ fourth, back to course |
# ------------------------------------------------------ fourth, back to course |
if (defined($csec)) { |
if ($csec ne '') { |
if (defined($$courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevel})) { |
$outpar[9]=$$courseopt{$seclevel}; |
$outpar[9]=$$courseopt{$seclevel}; |
$result=9; |
$result=9; |
Line 189 sub parmval_by_symb {
|
Line 192 sub parmval_by_symb {
|
} |
} |
} |
} |
# ------------------------------------------------------ fifth, check course group |
# ------------------------------------------------------ fifth, check course group |
if (defined($cgroup)) { |
if ($cgroup ne '') { |
if (defined($$courseopt{$grplevel})) { |
if (defined($$courseopt{$grplevel})) { |
$outpar[6]=$$courseopt{$grplevel}; |
$outpar[6]=$$courseopt{$grplevel}; |
$result=6; |
$result=6; |
Line 206 sub parmval_by_symb {
|
Line 209 sub parmval_by_symb {
|
|
|
# ---------------------------------------------------------- fifth, check user |
# ---------------------------------------------------------- fifth, check user |
|
|
if (defined($uname)) { |
if ($uname ne '') { |
if (defined($$useropt{$courselevel})) { |
if (defined($$useropt{$courselevel})) { |
$outpar[3]=$$useropt{$courselevel}; |
$outpar[3]=$$useropt{$courselevel}; |
$result=3; |
$result=3; |
Line 269 sub resetrulescache {
|
Line 272 sub resetrulescache {
|
|
|
sub rulescache { |
sub rulescache { |
my $id=shift; |
my $id=shift; |
if ($rulesid ne $env{'request.course.id'}) { |
if ($rulesid ne $env{'request.course.id'} |
%rules=(); |
&& !defined($rules{$id})) { |
} |
|
unless (defined($rules{$id})) { |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
%rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs); |
%rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs); |
Line 1514 sub assessparms {
|
Line 1515 sub assessparms {
|
$message="\n<p>\n".&mt("Full Name").": ". |
$message="\n<p>\n".&mt("Full Name").": ". |
$name{'firstname'}.' '.$name{'middlename'}.' ' |
$name{'firstname'}.' '.$name{'middlename'}.' ' |
.$name{'lastname'}.' '.$name{'generation'}. |
.$name{'lastname'}.' '.$name{'generation'}. |
"<br>\n".&mt('ID').": ".$name{'id'}.'<p>'; |
"<br />\n".&mt('ID').": ".$name{'id'}.'<p>'; |
} |
} |
@usersgroups = &Apache::lonnet::get_users_groups( |
@usersgroups = &Apache::lonnet::get_users_groups( |
$udom,$uname,$env{'request.course.id'}); |
$udom,$uname,$env{'request.course.id'}); |
Line 1562 sub assessparms {
|
Line 1563 sub assessparms {
|
foreach ('tolerance','date_default','date_start','date_end', |
foreach ('tolerance','date_default','date_start','date_end', |
'date_interval','int','float','string') { |
'date_interval','int','float','string') { |
$r->print('<input type="hidden" value="'. |
$r->print('<input type="hidden" value="'. |
$env{'form.recent_'.$_}.'" name="recent_'.$_.'">'); |
$env{'form.recent_'.$_}.'" name="recent_'.$_.'" />'); |
} |
} |
|
|
if (!$pssymb) { |
if (!$pssymb) { |
Line 1639 sub assessparms {
|
Line 1640 sub assessparms {
|
); |
); |
$r->print(<<ENDTABLETWO); |
$r->print(<<ENDTABLETWO); |
<th rowspan=3>$lt{'pie'}</th> |
<th rowspan=3>$lt{'pie'}</th> |
<th rowspan=3>$lt{'csv'}<br>($csuname $lt{'at'} $csudom)</th> |
<th rowspan=3>$lt{'csv'}<br />($csuname $lt{'at'} $csudom)</th> |
</tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th> |
</tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th> |
<th colspan=1>$lt{'ic'}</th> |
<th colspan=1>$lt{'ic'}</th> |
|
|
Line 1740 ENDTABLEHEADFOUR
|
Line 1741 ENDTABLEHEADFOUR
|
"<a href=\"javascript:openWindow('". |
"<a href=\"javascript:openWindow('". |
&Apache::lonnet::clutter($uri).'?symb='. |
&Apache::lonnet::clutter($uri).'?symb='. |
&escape($symbp{$rid}). |
&escape($symbp{$rid}). |
"', 'metadatafile', '450', '500', 'no', 'yes')\";". |
"', 'metadatafile', '450', '500', 'no', 'yes');\"". |
" TARGET=_self>$title"); |
" target=\"_self\">$title"); |
|
|
if ($thistitle) { |
if ($thistitle) { |
$r->print(' ('.$thistitle.')'); |
$r->print(' ('.$thistitle.')'); |
Line 2005 sub crsenv {
|
Line 2006 sub crsenv {
|
('environment', |
('environment', |
{'top level map backup '.$bkuptime => $tmp[1] }, |
{'top level map backup '.$bkuptime => $tmp[1] }, |
$dom,$crs). |
$dom,$crs). |
'<br>'; |
'<br />'; |
} |
} |
# |
# |
# Deal with modified default spreadsheets |
# Deal with modified default spreadsheets |
Line 2116 sub crsenv {
|
Line 2117 sub crsenv {
|
'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '. |
'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','default_xml_style'". |
"('envform','default_xml_style'". |
",'sty')\">$SelectStyleFile</a><br>", |
",'sty')\">$SelectStyleFile</a><br />", |
'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question'). |
'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question'). |
'</b><br />(<tt>user:domain,'. |
'</b><br />(<tt>user:domain,'. |
'user:domain(section;section;...;*;...),...</tt>)', |
'user:domain(section;section;...;*;...),...</tt>)', |
Line 2193 sub crsenv {
|
Line 2194 sub crsenv {
|
' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. |
' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. |
' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])', |
' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])', |
'print_header_format' |
'print_header_format' |
=> '<b>Print header format; substitutions: %n student name %c course id %a assignment', |
=> '<b>Print header format; substitutions</b>: %n student name %c course id %a assignment note, numbers after the % limit the field size', |
'anonymous_quiz' |
'anonymous_quiz' |
=> '<b>'.&mt('Anonymous quiz/exam').'</b><br />'. |
=> '<b>'.&mt('Anonymous quiz/exam').'</b><br />'. |
' (<tt><b>'.&mt('yes').'</b> '.&mt('to avoid print students names').' </tt>)', |
' (<tt><b>'.&mt('yes').'</b> '.&mt('to avoid print students names').' </tt>)', |
Line 2363 sub readdata {
|
Line 2364 sub readdata {
|
|
|
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
foreach (keys %$classlist) { |
foreach (keys %$classlist) { |
# the following undefs are for 'domain', and 'username' respectively. |
if ($_=~/^($match_username)\:($match_domain)$/) { |
if ($_=~/^(\w+)\:(\w+)$/) { |
|
my ($tuname,$tudom)=($1,$2); |
my ($tuname,$tudom)=($1,$2); |
my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); |
my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); |
foreach my $userkey (keys %{$useropt}) { |
foreach my $userkey (keys %{$useropt}) { |
Line 2432 sub storedata {
|
Line 2432 sub storedata {
|
} |
} |
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
} else { |
} else { |
push (@deldata,$thiskey); |
push (@deldata,$thiskey,$thiskey.'.type'); |
} |
} |
} elsif ($cmd eq 'datepointer') { |
} elsif ($cmd eq 'datepointer') { |
my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); |
my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); |
Line 2486 sub storedata {
|
Line 2486 sub storedata {
|
|
|
sub extractuser { |
sub extractuser { |
my $key=shift; |
my $key=shift; |
return ($key=~/^$env{'request.course.id'}.\[useropt\:(\w+)\:(\w+)\]\./); |
return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./); |
} |
} |
|
|
sub listdata { |
sub listdata { |
Line 2544 sub listdata {
|
Line 2544 sub listdata {
|
my $section=&mt('All Students'); |
my $section=&mt('All Students'); |
if ($middle=~/^\[(.*)\]/) { |
if ($middle=~/^\[(.*)\]/) { |
my $issection=$1; |
my $issection=$1; |
if ($issection=~/^useropt\:(\w+)\:(\w+)/) { |
if ($issection=~/^useropt\:($match_username)\:($match_domain)/) { |
$section=&mt('User').": ".&Apache::loncommon::plainname($1,$2); |
$section=&mt('User').": ".&Apache::loncommon::plainname($1,$2); |
} else { |
} else { |
$section=&mt('Group/Section').': '.$issection; |
$section=&mt('Group/Section').': '.$issection; |
Line 2832 ENDOVER
|
Line 2832 ENDOVER
|
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} |
} |
|
|
|
sub clean_parameters { |
|
my ($r) = @_; |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
|
my $start_page=&Apache::loncommon::start_page('Clean Parameters'); |
|
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Clean'); |
|
$r->print(<<ENDOVER); |
|
$start_page |
|
$breadcrumbs |
|
<form method="post" action="/adm/parmset?action=cleanparameters" name="parmform"> |
|
ENDOVER |
|
# Store modified |
|
|
|
&storedata($r,$crs,$dom); |
|
|
|
# Read modified data |
|
|
|
my $resourcedata=&readdata($crs,$dom); |
|
|
|
# List data |
|
|
|
$r->print('<h3>'. |
|
&mt('These parameters refer to resources that do not exist.'). |
|
'</h3>'. |
|
'<input type="submit" value="'.&mt('Delete Checked Parameters').'" />'.'<br />'. |
|
'<br />'); |
|
$r->print(&Apache::loncommon::start_data_table(). |
|
'<tr>'. |
|
'<th>'.&mt('Delete').'</th>'. |
|
'<th>'.&mt('Parameter').'</th>'. |
|
'</tr>'); |
|
foreach my $thiskey (sort(keys(%{$resourcedata}))) { |
|
next if (!exists($resourcedata->{$thiskey.'.type'}) |
|
&& $thiskey=~/\.type$/); |
|
my %data = &parse_key($thiskey); |
|
if (exists($data{'realm_exists'}) |
|
&& !$data{'realm_exists'}) { |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<tr>'. |
|
'<td><input type="checkbox" name="del_'.$thiskey.'" /></td>' ); |
|
|
|
$r->print('<td>'); |
|
$r->print(&mt('Parameter: "[_1]" with value: "[_2]"', |
|
&standard_parameter_names($data{'parameter_name'}), |
|
$resourcedata->{$thiskey})); |
|
$r->print('<br />'); |
|
if ($data{'scope_type'} eq 'all') { |
|
$r->print(&mt('All users')); |
|
} elsif ($data{'scope_type'} eq 'user') { |
|
$r->print(&mt('User: [_1]',join(':',@{$data{'scope'}}))); |
|
} elsif ($data{'scope_type'} eq 'section') { |
|
$r->print(&mt('Section: [_1]',$data{'scope'})); |
|
} elsif ($data{'scope_type'} eq 'group') { |
|
$r->print(&mt('Group: [_1]',$data{'scope'})); |
|
} |
|
$r->print('<br />'); |
|
if ($data{'realm_type'} eq 'all') { |
|
$r->print(&mt('All Resources')); |
|
} elsif ($data{'realm_type'} eq 'folder') { |
|
$r->print(&mt('Folder: [_1]'),$data{'realm'}); |
|
} elsif ($data{'realm_type'} eq 'symb') { |
|
my ($map,$resid,$url) = |
|
&Apache::lonnet::decode_symb($data{'realm'}); |
|
$r->print(&mt('Resource: [_1] <br /> with ID: [_2] <br /> in folder [_3]', |
|
$url,$resid,$map)); |
|
} |
|
$r->print(&mt('Part: [_1]',$data{'parameter_part'})); |
|
$r->print('</td></tr>'); |
|
|
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table().'<p>'. |
|
'<input type="submit" value="'.&mt('Delete Checked Parameters').'" />'. |
|
'</p></form>'. |
|
&Apache::loncommon::end_page()); |
|
} |
|
|
|
sub parse_key { |
|
my ($key) = @_; |
|
my %data; |
|
my ($middle,$part,$name)= |
|
($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
|
$data{'scope_type'} = 'all'; |
|
if ($middle=~/^\[(.*)\]/) { |
|
$data{'scope'} = $1; |
|
if ($data{'scope'}=~/^useropt\:($match_username)\:($match_domain)/) { |
|
$data{'scope_type'} = 'user'; |
|
$data{'scope'} = [$1,$2]; |
|
} else { |
|
#FIXME check for group scope |
|
$data{'scope_type'} = 'section'; |
|
} |
|
$middle=~s/^\[(.*)\]//; |
|
} |
|
$middle=~s/\.+$//; |
|
$middle=~s/^\.+//; |
|
$data{'realm_type'}='all'; |
|
if ($middle=~/^(.+)\_\_\_\(all\)$/) { |
|
$data{'realm'} = $1; |
|
$data{'realm_type'} = 'folder'; |
|
$data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); |
|
($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'}); |
|
&Apache::lonnet::logthis($1." siad ". $data{'realm_exists'} ); |
|
} elsif ($middle) { |
|
$data{'realm'} = $middle; |
|
$data{'realm_type'} = 'symb'; |
|
$data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); |
|
my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'}); |
|
$data{'realm_exists'} = &Apache::lonnet::symbverify($data{'realm'},$url); |
|
} |
|
|
|
$data{'parameter_part'} = $part; |
|
$data{'parameter_name'} = $name; |
|
|
|
return %data; |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
=pod |
=pod |
|
|
=item check_cloners |
=item check_cloners |
Line 3070 ENDMAINFORMHEAD
|
Line 3188 ENDMAINFORMHEAD
|
} |
} |
### Set portfolio metadata |
### Set portfolio metadata |
sub output_row { |
sub output_row { |
my ($r, $field_name, $field_text) = @_; |
my ($r, $field_name, $field_text, $added_flag) = @_; |
|
my $row_class; |
my $output; |
my $output; |
my $options=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'}; |
my $options=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'}; |
my $values=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.values'}; |
my $values=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.values'}; |
unless (defined($options)) { |
if (!defined($options)) { |
$options = 'active,stuadd'; |
$options = 'active,stuadd'; |
$values = ''; |
$values = ''; |
} |
} |
$output.='<strong>'.$field_text.':</strong>'; |
if (!($options =~ /deleted/)) { |
$output.='<input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /><br />'; |
$output = &Apache::loncommon::start_data_table_row(); |
|
$output .= '<td><span class="LC_metadata"><strong>'.$field_text.':</strong></span></td>'; |
my @options= ( ['active', 'Show to student'], |
# $output .= '<td><strong>'.$field_text.':</strong></td>'; |
|
$output .= '<td><span class="LC_metadata"><input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /></span></td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
my @options= ( ['active', 'Show to student'], |
['onlyone','Student may select only one choice'], |
['onlyone','Student may select only one choice'], |
['stuadd', 'Student may type choices']); |
['stuadd', 'Student may type choices']); |
foreach my $opt (@options) { |
if ($added_flag) { |
my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; |
push @options,['deleted', 'Delete Metadata Field']; |
$output.=(' 'x5).'<label><input type="checkbox" name="'. |
} |
$field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'. |
foreach my $opt (@options) { |
&mt($opt->[1]).'</label> <br />'; |
my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
$output .= '<td colspan="2">'.(' ' x 5).'<span class="LC_metadata"><label><input type="checkbox" name="'. |
|
$field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'. |
|
&mt($opt->[1]).'</label></span> </td>'; |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
} |
|
|
} |
} |
return ($output); |
return ($output); |
} |
} |
|
sub order_meta_fields { |
|
my ($r)=@_; |
|
my $idx = 1; |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
$r->print(&Apache::loncommon::start_page('Order Metadata Fields')); |
|
&Apache::lonhtmlcommon::add_breadcrumb |
|
({href=>"/adm/parmset?action=setrestrictmeta", |
|
text=>"Restrict Metadata"}, |
|
{text=>"Order Metadata"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata')); |
|
if ($env{'form.storeorder'}) { |
|
my $newpos = $env{'form.newpos'} - 1; |
|
my $currentpos = $env{'form.currentpos'} - 1; |
|
my @neworder = (); |
|
my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; |
|
my $i; |
|
if ($newpos > $currentpos) { |
|
# moving stuff up |
|
for ($i=0;$i<$currentpos;$i++) { |
|
$neworder[$i]=$oldorder[$i]; |
|
} |
|
for ($i=$currentpos;$i<$newpos;$i++) { |
|
$neworder[$i]=$oldorder[$i+1]; |
|
} |
|
$neworder[$newpos]=$oldorder[$currentpos]; |
|
for ($i=$newpos+1;$i<=$#oldorder;$i++) { |
|
$neworder[$i]=$oldorder[$i]; |
|
} |
|
} else { |
|
# moving stuff down |
|
for ($i=0;$i<$newpos;$i++) { |
|
$neworder[$i]=$oldorder[$i]; |
|
} |
|
$neworder[$newpos]=$oldorder[$currentpos]; |
|
for ($i=$newpos+1;$i<$currentpos+1;$i++) { |
|
$neworder[$i]=$oldorder[$i-1]; |
|
} |
|
for ($i=$currentpos+1;$i<=$#oldorder;$i++) { |
|
$neworder[$i]=$oldorder[$i]; |
|
} |
|
} |
|
my $ordered_fields = join ",", @neworder; |
|
my $put_result = &Apache::lonnet::put('environment', |
|
{'metadata.addedorder'=>$ordered_fields},$dom,$crs); |
|
&Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields); |
|
} |
|
my $fields = &get_added_meta_fieldnames(); |
|
my $ordered_fields; |
|
my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; |
|
if (!@fields_in_order) { |
|
# no order found, pick sorted order then create metadata.addedorder key. |
|
foreach my $key (sort keys %$fields) { |
|
push @fields_in_order, $key; |
|
$ordered_fields = join ",", @fields_in_order; |
|
} |
|
my $put_result = &Apache::lonnet::put('environment', |
|
{'metadata.addedorder'=>$ordered_fields},$dom,$crs); |
|
} |
|
$r->print('<table>'); |
|
my $num_fields = scalar(@fields_in_order); |
|
foreach my $key (@fields_in_order) { |
|
$r->print('<tr><td>'); |
|
$r->print('<form method="post" action="">'); |
|
$r->print('<select name="newpos" onChange="this.form.submit()">'); |
|
for (my $i = 1;$i le $num_fields;$i ++) { |
|
if ($i eq $idx) { |
|
$r->print('<option value="'.$i.'" SELECTED>('.$i.')</option>'); |
|
} else { |
|
$r->print('<option value="'.$i.'">'.$i.'</option>'); |
|
} |
|
} |
|
$r->print('</select></td><td>'); |
|
$r->print('<input type="hidden" name="currentpos" value="'.$idx.'" />'); |
|
$r->print('<input type="hidden" name="storeorder" value="true" />'); |
|
$r->print('</form>'); |
|
$r->print($$fields{$key}.'</td></tr>'); |
|
$idx ++; |
|
} |
|
$r->print('</table>'); |
|
return 'ok'; |
|
} |
|
sub addmetafield { |
|
my ($r)=@_; |
|
$r->print(&Apache::loncommon::start_page('Add Metadata Field')); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field')); |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if (exists($env{'form.undelete'})) { |
|
my @meta_fields = &Apache::loncommon::get_env_multiple('form.undelete'); |
|
foreach my $meta_field(@meta_fields) { |
|
my $options = $env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.options'}; |
|
$options =~ s/deleted//; |
|
$options =~ s/,,/,/; |
|
my $put_result = &Apache::lonnet::put('environment', |
|
{'metadata.'.$meta_field.'.options'=>$options},$dom,$crs); |
|
|
|
$r->print('Undeleted Metadata Field <strong>'.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}."</strong> with result ".$put_result.'<br />'); |
|
} |
|
$r->print('<form action="" method="post">'); |
|
$r->print('<input type="hidden" name="action" value="setrestrictmeta" />'); |
|
$r->print('<input type="submit" value="Continue" />'); |
|
} elsif (exists($env{'form.fieldname'})) { |
|
my $meta_field = $env{'form.fieldname'}; |
|
my $display_field = $env{'form.fieldname'}; |
|
$meta_field =~ s/\W/_/g; |
|
$meta_field =~ tr/A-Z/a-z/; |
|
my $put_result = &Apache::lonnet::put('environment', |
|
{'metadata.'.$meta_field.'.values'=>"", |
|
'metadata.'.$meta_field.'.added'=>"$display_field", |
|
'metadata.'.$meta_field.'.options'=>""},$dom,$crs); |
|
$r->print('Added new Metadata Field '.$env{'form.fieldname'}." with result ".$put_result); |
|
} else { |
|
my $fields = &get_deleted_meta_fieldnames(); |
|
if ($fields) { |
|
$r->print('You may undelete previously deleted fields.<br />Check those you wish to undelete and click Undelete.<br />'); |
|
$r->print('<form method="post" action="">'); |
|
foreach my $key(keys(%$fields)) { |
|
$r->print('<input type="checkbox" name="undelete" value="'.$key.'" />'.$$fields{$key}.'<br /'); |
|
} |
|
$r->print('<input type="submit" name="undelete" value="Undelete" />'); |
|
$r->print('</form>'); |
|
} |
|
$r->print('<hr /><strong>Or</strong> you may enter a new metadata field name.<form method="post" action="/adm/parmset?action=addmetadata"'); |
|
$r->print('<input type="text" name="fieldname" /><br />'); |
|
$r->print('<input type="submit" value="Add Metadata Field" />'); |
|
$r->print('</form>'); |
|
} |
|
} |
sub setrestrictmeta { |
sub setrestrictmeta { |
my ($r)=@_; |
my ($r)=@_; |
my $next_meta; |
my $next_meta; |
my $output; |
my $output; |
my $item_num; |
my $item_num; |
my $put_result; |
my $put_result; |
|
|
$r->print(&Apache::loncommon::start_page('Restrict Metadata')); |
$r->print(&Apache::loncommon::start_page('Restrict Metadata')); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
Line 3123 sub setrestrictmeta {
|
Line 3379 sub setrestrictmeta {
|
if ($env{'form.'.$meta_field.'_active'}) { |
if ($env{'form.'.$meta_field.'_active'}) { |
$options.='active,'; |
$options.='active,'; |
} |
} |
|
if ($env{'form.'.$meta_field.'_deleted'}) { |
|
$options.='deleted,'; |
|
} |
|
|
my $name = $save_field; |
my $name = $save_field; |
$put_result = &Apache::lonnet::put('environment', |
$put_result = &Apache::lonnet::put('environment', |
{'metadata.'.$meta_field.'.options'=>$options, |
{'metadata.'.$meta_field.'.options'=>$options, |
Line 3134 sub setrestrictmeta {
|
Line 3394 sub setrestrictmeta {
|
} |
} |
&Apache::lonnet::coursedescription($env{'request.course.id'}, |
&Apache::lonnet::coursedescription($env{'request.course.id'}, |
{'freshen_cache' => 1}); |
{'freshen_cache' => 1}); |
|
# Get the default metadata fields |
my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); |
my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); |
|
# Now get possible added metadata fields |
|
my $added_metadata_fields = &get_added_meta_fieldnames(\%metadata_fields); |
|
my $row_alt = 1; |
|
$output .= &Apache::loncommon::start_data_table(); |
foreach my $field (sort(keys(%metadata_fields))) { |
foreach my $field (sort(keys(%metadata_fields))) { |
&Apache::lonnet::logthis ($field); |
|
if ($field ne 'courserestricted') { |
if ($field ne 'courserestricted') { |
|
$row_alt = $row_alt ? 0 : 1; |
$output.= &output_row($r, $field, $metadata_fields{$field}); |
$output.= &output_row($r, $field, $metadata_fields{$field}); |
} |
} |
} |
} |
|
my $added_flag = 1; |
|
foreach my $field (sort(keys(%$added_metadata_fields))) { |
|
$row_alt = $row_alt ? 0 : 1; |
|
$output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag, $row_alt); |
|
} |
|
$output .= &Apache::loncommon::end_data_table(); |
$r->print(<<ENDenv); |
$r->print(<<ENDenv); |
<form method="post" action="/adm/parmset?action=setrestrictmeta" name="form"> |
<form method="post" action="/adm/parmset?action=setrestrictmeta" name="form"> |
<p> |
|
$output |
$output |
<input type="submit" name="restrictmeta" value="Update Metadata Restrictions"> |
<input type="submit" name="restrictmeta" value="Update Metadata Restrictions" /> |
|
</form><br /> |
|
<form method="post" action="/adm/parmset?action=addmetadata" name="form1"> |
|
<input type="submit" name="restrictmeta" value="Add a Metadata Field" /> |
|
</form> |
|
<br /> |
|
<form method="post" action="/adm/parmset?action=ordermetadata" name="form2"> |
|
<input type="submit" name="restrictmeta" value="Order Metadata Fields" /> |
</form> |
</form> |
ENDenv |
ENDenv |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
return 'ok'; |
return 'ok'; |
} |
} |
################################################## |
################################################## |
|
sub get_added_meta_fieldnames { |
|
my %fields; |
|
foreach my $key(%env) { |
|
if ($key =~ m/\.metadata\.(.+)\.added$/) { |
|
my $field_name = $1; |
|
my ($display_field_name) = $env{$key}; |
|
$fields{$field_name} = $display_field_name; |
|
} |
|
} |
|
return \%fields; |
|
} |
|
sub get_deleted_meta_fieldnames { |
|
my %fields; |
|
my ($default_fields) = @_; |
|
foreach my $key(%env) { |
|
if ($key =~ m/\.metadata\.(.+)\.added$/) { |
|
my $field_name = $1; |
|
if ($env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'} =~ m/deleted/) { |
|
my ($display_field_name) = $env{$key}; |
|
$fields{$field_name} = $display_field_name; |
|
} |
|
} |
|
} |
|
return \%fields; |
|
} |
sub defaultsetter { |
sub defaultsetter { |
my ($r) = @_; |
my ($r) = @_; |
|
|
Line 3405 sub parm_change_log {
|
Line 3706 sub parm_change_log {
|
\%saveable_parameters); |
\%saveable_parameters); |
&Apache::loncommon::restore_course_settings('parameter_log', |
&Apache::loncommon::restore_course_settings('parameter_log', |
\%saveable_parameters); |
\%saveable_parameters); |
if (!$env{'form.show'}) { $env{'form.show'}=10; } |
$r->print(&Apache::loncommon::display_filter(). |
|
|
my $countselect = |
|
&Apache::lonmeta::selectbox('show',$env{'form.show'},undef, |
|
(&mt('all'),10,20,50,100,1000,10000)); |
|
|
|
$r->print('<nobr>'.&mt('[_1] Records',$countselect).'</nobr>'. |
|
'<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1'). |
'<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1'). |
' '.&mt('Include parameter types').'</label>'. |
' '.&mt('Include parameter types').'</label>'. |
'<input type="submit" value="'.&mt('Display').'" /></form>'); |
'<input type="submit" value="'.&mt('Display').'" /></form>'); |
Line 3423 sub parm_change_log {
|
Line 3718 sub parm_change_log {
|
&mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'. |
&mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'. |
&Apache::loncommon::end_data_table_header_row()); |
&Apache::loncommon::end_data_table_header_row()); |
my $shown=0; |
my $shown=0; |
foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) { |
my $folder=''; |
|
if ($env{'form.displayfilter'} eq 'currentfolder') { |
|
my $last=''; |
|
if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
|
&GDBM_READER(),0640)) { |
|
$last=$hash{'last_known'}; |
|
untie(%hash); |
|
} |
|
if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); } |
|
} |
|
foreach my $id (sort |
|
{ |
|
if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) { |
|
return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'} |
|
} |
|
my $aid = (split('00000',$a))[-1]; |
|
my $bid = (split('00000',$b))[-1]; |
|
return $bid<=>$aid; |
|
} (keys(%parmlog))) { |
my @changes=keys(%{$parmlog{$id}{'logentry'}}); |
my @changes=keys(%{$parmlog{$id}{'logentry'}}); |
my $count=$#changes+1; |
my $count = 0; |
if (!$env{'form.includetypes'}) { $count=int($count/2); } |
|
if ($count == 0) { $count = 1; } |
|
my $time = |
my $time = |
&Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); |
&Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); |
my $plainname = |
my $plainname = |
Line 3446 sub parm_change_log {
|
Line 3757 sub parm_change_log {
|
$parmlog{$id}{'exe_udom'}); |
$parmlog{$id}{'exe_udom'}); |
} |
} |
my $row_start=&Apache::loncommon::start_data_table_row(); |
my $row_start=&Apache::loncommon::start_data_table_row(); |
$r->print($row_start.'<td rowspan="'.$count.'">'.$time.'</td> |
|
<td rowspan="'.$count.'">'.$about_me_link. |
|
'<br /><tt>'.$parmlog{$id}{'exe_uname'}. |
|
':'.$parmlog{$id}{'exe_udom'}.'</tt>'. |
|
$send_msg_link.'</td>'); |
|
my $makenewrow=0; |
my $makenewrow=0; |
my %istype=(); |
my %istype=(); |
|
my $output; |
foreach my $changed (reverse(sort(@changes))) { |
foreach my $changed (reverse(sort(@changes))) { |
my $value=$parmlog{$id}{'logentry'}{$changed}; |
my $value=$parmlog{$id}{'logentry'}{$changed}; |
my $typeflag = ($changed =~/\.type$/ && |
my $typeflag = ($changed =~/\.type$/ && |
!exists($parmlog{$id}{'logentry'}{$changed.'.type'})); |
!exists($parmlog{$id}{'logentry'}{$changed.'.type'})); |
my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= |
my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= |
&components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); |
&components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); |
|
if ($env{'form.displayfilter'} eq 'currentfolder') { |
|
if ($folder) { |
|
if ($middle!~/^\Q$folder\E/) { next; } |
|
} |
|
} |
if ($typeflag) { |
if ($typeflag) { |
$istype{$parmname}=$value; |
$istype{$parmname}=$value; |
if (!$env{'form.includetypes'}) { next; } |
if (!$env{'form.includetypes'}) { next; } |
} |
} |
if ($makenewrow) { $r->print($row_start); } else { $makenewrow=1; } |
$count++; |
$r->print('<td>'.$realm.'</td><td>'.$section.'</td><td>'. |
if ($makenewrow) { |
|
$output .= $row_start; |
|
} else { |
|
$makenewrow=1; |
|
} |
|
$output .='<td>'.$realm.'</td><td>'.$section.'</td><td>'. |
&standard_parameter_names($parmname).'</td><td>'. |
&standard_parameter_names($parmname).'</td><td>'. |
($part?&mt('Part: [_1]',$part):&mt('All Parts')).'</td><td>'); |
($part?&mt('Part: [_1]',$part):&mt('All Parts')).'</td><td>'; |
my $stillactive=0; |
my $stillactive=0; |
if ($parmlog{$id}{'deleteflag'}) { |
if ($parmlog{$id}{'delflag'}) { |
$r->print(&mt('Deleted')); |
$output .= &mt('Deleted'); |
} else { |
} else { |
if ($typeflag) { |
if ($typeflag) { |
$r->print(&mt('Type: [_1]',&standard_parameter_names($value))); |
$output .= &mt('Type: [_1]',&standard_parameter_names($value)); |
} else { |
} else { |
my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what), |
my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what), |
$uname,$udom,$issection,$issection,$courseopt); |
$uname,$udom,$issection,$issection,$courseopt); |
if (&isdateparm($istype{$parmname})) { |
if (&isdateparm($istype{$parmname})) { |
$r->print(&Apache::lonlocal::locallocaltime($value)); |
$output .= &Apache::lonlocal::locallocaltime($value); |
} else { |
} else { |
$r->print($value); |
$output .= $value; |
} |
} |
if ($value ne $all[$level]) { |
if ($value ne $all[$level]) { |
$r->print('<br /><span class="LC_warning">'.&mt('Not active anymore').'</span>'); |
$output .= '<br /><span class="LC_warning">'.&mt('Not active anymore').'</span>'; |
} else { |
} else { |
$stillactive=1; |
$stillactive=1; |
} |
} |
} |
} |
} |
} |
$r->print('</td>'); |
$output .= '</td><td>'; |
if ($stillactive) { |
if ($stillactive) { |
my $title=&mt('Changed [_1]',&standard_parameter_names($parmname)); |
my $title=&mt('Changed [_1]',&standard_parameter_names($parmname)); |
my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription, |
my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription, |
(&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value)); |
(&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value)); |
if (($uname) && ($udom)) { |
if (($uname) && ($udom)) { |
$r->print('<td>'. |
$output .= |
&Apache::loncommon::messagewrapper('Notify User',$uname,$udom,$title,$description). |
&Apache::loncommon::messagewrapper('Notify User', |
'</td>'); |
$uname,$udom,$title, |
|
$description); |
} else { |
} else { |
$r->print('<td>'. |
$output .= |
&Apache::lonrss::course_blog_link($id,$title,$description). |
&Apache::lonrss::course_blog_link($id,$title, |
'</td>'); |
$description); |
} |
} |
} else { |
|
$r->print('<td> </td>'); |
|
} |
} |
$r->print(&Apache::loncommon::end_data_table_row()); |
$output .= '</td>'.&Apache::loncommon::end_data_table_row(); |
|
} |
|
if ($env{'form.displayfilter'} eq 'containing') { |
|
my $wholeentry=$about_me_link.':'. |
|
$parmlog{$id}{'exe_uname'}.':'.$parmlog{$id}{'exe_udom'}.':'. |
|
$output; |
|
if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } |
|
} |
|
if ($count) { |
|
$r->print($row_start.'<td rowspan="'.$count.'">'.$time.'</td> |
|
<td rowspan="'.$count.'">'.$about_me_link. |
|
'<br /><tt>'.$parmlog{$id}{'exe_uname'}. |
|
':'.$parmlog{$id}{'exe_udom'}.'</tt>'. |
|
$send_msg_link.'</td>'.$output); |
|
$shown++; |
} |
} |
$shown++; |
|
if (!($env{'form.show'} eq &mt('all') |
if (!($env{'form.show'} eq &mt('all') |
|| $shown<=$env{'form.show'})) { last; } |
|| $shown<=$env{'form.show'})) { last; } |
} |
} |
Line 3515 sub parm_change_log {
|
Line 3844 sub parm_change_log {
|
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
} |
} |
|
|
|
sub check_for_course_info { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
return 1 if ($navmap); |
|
return 0; |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
Line 3558 sub handler {
|
Line 3893 sub handler {
|
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || |
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || |
&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. |
&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. |
$env{'request.course.sec'})); |
$env{'request.course.sec'})); |
if ($env{'request.course.id'} && $parm_permission) { |
my $exists = &check_for_course_info(); |
|
|
|
if ($env{'request.course.id'} && $parm_permission && $exists) { |
|
|
# Start Page |
# Start Page |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
Line 3592 sub handler {
|
Line 3929 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
text=>"Overview Mode"}); |
text=>"Overview Mode"}); |
&overview($r); |
&overview($r); |
|
} elsif ($env{'form.action'} eq 'addmetadata' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', |
|
text=>"Add Metadata Field"}); |
|
&addmetafield($r); |
|
} elsif ($env{'form.action'} eq 'ordermetadata' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', |
|
text=>"Add Metadata Field"}); |
|
&order_meta_fields($r); |
} elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) { |
} elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) { |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta', |
text=>"Restrict Metadata"}); |
text=>"Restrict Metadata"}); |
Line 3613 sub handler {
|
Line 3958 sub handler {
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', |
text=>"Parameter Change Log"}); |
text=>"Parameter Change Log"}); |
&parm_change_log($r); |
&parm_change_log($r); |
|
} elsif ($env{'form.action'} eq 'cleanparameters' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters', |
|
text=>"Clean Parameters"}); |
|
&clean_parameters($r); |
} |
} |
} else { |
} else { |
# ----------------------------- Not in a course, or not allowed to modify parms |
# ----------------------------- Not in a course, or not allowed to modify parms |
$env{'user.error.msg'}= |
if ($exists) { |
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
$env{'user.error.msg'}= |
|
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
|
} else { |
|
$env{'user.error.msg'}= |
|
"/adm/parmset::0:1:Course environment gone, reinitialize the course"; |
|
} |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
return OK; |
return OK; |