--- loncom/publisher/loncleanup.pm 2005/05/28 18:53:50 1.3
+++ loncom/publisher/loncleanup.pm 2006/12/20 22:41:08 1.9
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to cleanup XML files
#
-# $Id: loncleanup.pm,v 1.3 2005/05/28 18:53:50 albertel Exp $
+# $Id: loncleanup.pm,v 1.9 2006/12/20 22:41:08 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,6 +38,9 @@ use Apache::loncacc;
use Apache::loncommon();
use Apache::lonlocal;
use Apache::lonnet;
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
+
sub latextrans {
my $symbolfont=shift;
@@ -218,8 +221,9 @@ sub htmlclean {
}
# Generate empty tags, remove wrong end tags
unless ($blockemptytags) {
- $raw=~s/\<(br|hr|img|meta|allow|basefont)([^\>\/]*?)\>/\<$1$2 \/\>/gis;
- $raw=~s/\<\/(br|hr|img|meta|allow|basefont)\>//gis;
+ $raw=~s/\<(br|hr|img|meta|embed|allow|basefont)([^\>]*?)\>/\<$1$2 \/\>/gis;
+ $raw=~s/\<\/(br|hr|img|meta|embed|allow|basefont)\>//gis;
+ $raw=~s/\/ \/\>/\/\>/gs;
unless ($full) {
$raw=~s/\<[\/]*(body|head|html)\>//gis;
}
@@ -244,21 +248,85 @@ sub htmlclean {
sub phaseone {
my ($r,$fn,$uname,$udom)=@_;
+ $r->print(&mt('Select actions to attempt:').
+ '
'.
+ &mt('Linefeeds, formfeeds, and carriage returns').
+ '
'.
+ &mt('Empty tags').
+ '
'.
+ &mt('Lower casing').
+ '
'.
+ &mt('Symbol font').
+ ''.
+ '
');
}
sub phasetwo {
my ($r,$fn,$uname,$udom)=@_;
+ open(IN,'/home/'.$uname.'/public_html/'.$fn);
+ my $text='';
+ while (my $line=) {
+ $text.=$line;
+ }
+ close(IN);
+ my $uri='/~'.$uname.$fn;
+ my $result=&Apache::lonnet::ssi_body($uri,
+ ('grade_target'=>'web',
+ 'return_only_error_and_warning_counts' => 1));
+ my ($errorcount,$warningcount)=split(':',$result);
+ $r->print(&mt('Original file').': '.
+ $errorcount.' '.&mt('error(s)').', '.
+ $warningcount.' '.&mt('warning(s)'));
+ $text=&htmlclean($text,1,
+ ($env{'form.linefeed'} ne 'on'),
+ ($env{'form.empty'} ne 'on'),
+ ($env{'form.lower'} ne 'on'),
+ ($env{'form.symbol'} ne 'on'));
+ my ($main,$ext)=($fn=~/^(.*)\.(\w+)/);
+ my $newfn=$main.'_Auto_Cleaned_Up.'.$ext;
+ open(OUT,'>/home/'.$uname.'/public_html'.$newfn);
+ print OUT $text;
+ close(OUT);
+ my $newuri='/~'.$uname.$newfn;
+ $result=&Apache::lonnet::ssi_body($newuri,
+ ('grade_target'=>'web',
+ 'return_only_error_and_warning_counts' => 1));
+ ($errorcount,$warningcount)=split(':',$result);
+ $r->print('
'.&mt('Cleaned up file').': '.
+ $errorcount.' '.&mt('error(s)').', '.
+ $warningcount.' '.&mt('warning(s)').
+ '
'.
+ &mt('Open (and edit) cleaned up file in new window').''.
+ '
'.
+ &mt('Show diffs in new window').'
'.
+ ''.
+ ''.
+ ''
+ );
}
sub phasethree {
my ($r,$fn,$uname,$udom)=@_;
+ my $old='/home/'.$uname.'/public_html/'.$fn;
+ my ($main,$ext)=($fn=~/^(.*)\.(\w+)/);
+ my $newfn=$main.'_Auto_Cleaned_Up.'.$ext;
+ my $new='/home/'.$uname.'/public_html'.$newfn;
+ if ($env{'form.accept'}) {
+ $r->print(&mt('Accepting changes'));
+ move($new,$old);
+ } else {
+ $r->print(&mt('Rejeting changes'));
+ unlink($new);
+ }
}
# ---------------------------------------------------------------- Main Handler
sub handler {
my $r=shift;
-
+ my $fn='';
# Get query string for limited number of parameters
@@ -294,24 +362,32 @@ sub handler {
return HTTP_NOT_ACCEPTABLE;
}
- $fn=~s/\/\~(\w+)//;
+ $fn=~s{/~($LONCAPA::username_re)}{};
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- $r->print('LON-CAPA Construction Space');
-
- $r->print(&Apache::loncommon::bodytag('Cleanup XML Document'));
-
- if ($env{'form.phase'} eq 'three') {
- &phasethree($r,$fn,$uname,$udom);
- } elsif ($env{'form.phase'} eq 'two') {
- &phasetwo($r,$fn,$uname,$udom);
+ $r->print(&Apache::loncommon::start_page('Cleanup XML Document'));
+ $r->print(''.$fn.'
'.
+ '