--- loncom/interface/lonparmset.pm 2006/08/09 20:47:32 1.330 +++ loncom/interface/lonparmset.pm 2006/09/07 21:57:52 1.334 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.330 2006/08/09 20:47:32 albertel Exp $ +# $Id: lonparmset.pm,v 1.334 2006/09/07 21:57:52 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2432,7 +2432,7 @@ sub storedata { } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { - push (@deldata,$thiskey); + push (@deldata,$thiskey,$thiskey.'.type'); } } elsif ($cmd eq 'datepointer') { my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); @@ -2832,9 +2832,127 @@ ENDOVER &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 +# Store modified + + &storedata($r,$crs,$dom); + +# Read modified data + + my $resourcedata=&readdata($crs,$dom); + +# List data + + $r->print('

'. + &mt('These parameters refer to resources that do not exist.'). + '

'. + ''.'
'. + '
'); + $r->print(&Apache::loncommon::start_data_table(). + ''. + ''.&mt('Delete').''. + ''.&mt('Parameter').''. + ''); + 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(). + ''. + '' ); + + $r->print(''); + $r->print(&mt('Parameter: "[_1]" with value: "[_2]"', + &standard_parameter_names($data{'parameter_name'}), + $resourcedata->{$thiskey})); + $r->print('
'); + 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('
'); + 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]
   with ID: [_2]
   in folder [_3]', + $url,$resid,$map)); + } + $r->print(&mt('Part: [_1]',$data{'parameter_part'})); + $r->print(''); + + } + } + $r->print(&Apache::loncommon::end_data_table().'

'. + ''. + '

'. + &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\:(\w+)\:(\w+)/) { + $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 =item check_cloners @@ -3092,14 +3210,25 @@ sub output_row { } return ($output); } - +sub addmetafield { + my ($r)=@_; + $r->print(&Apache::loncommon::start_page('Add Metadata Field')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field')); + if (exists($env{'form.fieldname'})) { + $r->print('Here is a field'); + } + $r->print('
print('
'); + $r->print(''); + $r->print('
'); +} sub setrestrictmeta { my ($r)=@_; my $next_meta; my $output; my $item_num; my $put_result; - + &Apache::lonnet::logthis("restricting metadata"); $r->print(&Apache::loncommon::start_page('Restrict Metadata')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -3146,6 +3275,9 @@ sub setrestrictmeta {

$output +
+

+
ENDenv $r->print(&Apache::loncommon::end_page()); @@ -3425,8 +3557,7 @@ sub parm_change_log { my $shown=0; foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) { my @changes=keys(%{$parmlog{$id}{'logentry'}}); - my $count=$#changes+1; - if (!$env{'form.includetypes'}) { $count=$count/2; } + my $count = 0; my $time = &Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); my $plainname = @@ -3445,66 +3576,74 @@ sub parm_change_log { $parmlog{$id}{'exe_udom'}); } my $row_start=&Apache::loncommon::start_data_table_row(); - $r->print($row_start.''.$time.' - '.$about_me_link. - '
'.$parmlog{$id}{'exe_uname'}. - ':'.$parmlog{$id}{'exe_udom'}.''. - $send_msg_link.''); + $r->print($row_start); my $makenewrow=0; my %istype=(); + my $output; foreach my $changed (reverse(sort(@changes))) { my $value=$parmlog{$id}{'logentry'}{$changed}; - my $typeflag = (!exists($parmlog{$id}{'logentry'}{$changed.'.type'})); + my $typeflag = ($changed =~/\.type$/ && + !exists($parmlog{$id}{'logentry'}{$changed.'.type'})); my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); if ($typeflag) { $istype{$parmname}=$value; if (!$env{'form.includetypes'}) { next; } } - if ($makenewrow) { $r->print($row_start); } else { $makenewrow=1; } - $r->print(''.$realm.''.$section.''. + $count++; + if ($makenewrow) { + $output .= $row_start; + } else { + $makenewrow=1; + } + $output .=''.$realm.''.$section.''. &standard_parameter_names($parmname).''. - ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''); + ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''; my $stillactive=0; - if ($parmlog{$id}{'deleteflag'}) { - $r->print(&mt('Deleted')); + if ($parmlog{$id}{'delflag'}) { + $output .= &mt('Deleted'); } else { if ($typeflag) { - $r->print(&mt('Type: [_1]',&standard_parameter_names($value))); + $output .= &mt('Type: [_1]',&standard_parameter_names($value)); } else { my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what), $uname,$udom,$issection,$issection,$courseopt); if (&isdateparm($istype{$parmname})) { - $r->print(&Apache::lonlocal::locallocaltime($value)); + $output .= &Apache::lonlocal::locallocaltime($value); } else { - $r->print($value); + $output .= $value; } if ($value ne $all[$level]) { - $r->print('
'.&mt('Not active anymore').''); + $output .= '
'.&mt('Not active anymore').''; } else { $stillactive=1; } } } - $r->print(''); + $output .= ''; if ($stillactive) { my $title=&mt('Changed [_1]',&standard_parameter_names($parmname)); my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription, (&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value)); if (($uname) && ($udom)) { - $r->print(''. - &Apache::loncommon::messagewrapper('Notify User',$uname,$udom,$title,$description). - ''); + $output .= + &Apache::loncommon::messagewrapper('Notify User', + $uname,$udom,$title, + $description); } else { - $r->print(''. - &Apache::lonrss::course_blog_link($id,$title,$description). - ''); + $output .= + &Apache::lonrss::course_blog_link($id,$title, + $description); } - } else { - $r->print(' '); } - $r->print(&Apache::loncommon::end_data_table_row()); + $output .= ''.&Apache::loncommon::end_data_table_row(); } + $r->print(''.$time.' + '.$about_me_link. + '
'.$parmlog{$id}{'exe_uname'}. + ':'.$parmlog{$id}{'exe_udom'}.''. + $send_msg_link.''.$output); + $shown++; if (!($env{'form.show'} eq &mt('all') || $shown<=$env{'form.show'})) { last; } @@ -3590,6 +3729,10 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', text=>"Overview Mode"}); &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 'setrestrictmeta' && $parm_permission) { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta', text=>"Restrict Metadata"}); @@ -3611,6 +3754,10 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', text=>"Parameter Change Log"}); &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 { # ----------------------------- Not in a course, or not allowed to modify parms