--- loncom/interface/londocs.pm 2002/09/06 15:18:23 1.21
+++ loncom/interface/londocs.pm 2002/10/18 14:50:22 1.33
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.21 2002/09/06 15:18:23 www Exp $
+# $Id: londocs.pm,v 1.33 2002/10/18 14:50:22 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,15 +29,21 @@
package Apache::londocs;
use strict;
-use Apache::Constants qw(:common);
+use Apache::Constants qw(:common :http);
use Apache::lonnet;
use Apache::loncommon;
use Apache::lonratedt;
use Apache::lonratsrv;
use Apache::lonxml;
+use GDBM_File;
my $iconpath;
+my %hash;
+
+my $hashtied;
+my %alreadyseen=();
+
# Mapread read maps into lonratedt::global arrays
# @order and @resources, determines status
# sets @order - pointer to resources in right order
@@ -211,12 +217,67 @@ END
$foldertitle;
}
if ($isfolder) { $url.='&foldername='.$foldertitle; }
- $line.='
| '.
- "$title | ";
+ "$title | ";
return $line;
}
+# ---------------------------------------------------------------- tie the hash
+
+sub tiehash {
+ $hashtied=0;
+ if ($ENV{'request.course.fn'}) {
+ if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
+ &GDBM_READER(),0640)) {
+ $hashtied=1;
+ }
+ }
+}
+
+sub untiehash {
+ if ($hashtied) { untie %hash; }
+ $hashtied=0;
+}
+
+# --------------------------------------------------------------- check on this
+
+sub checkonthis {
+ my ($r,$url,$level,$title)=@_;
+ $alreadyseen{$url}=1;
+ $r->rflush();
+ if ($url) {
+ $r->print('
');
+ for (my $i=0;$i<=$level*5;$i++) {
+ $r->print(' ');
+ }
+ $r->print(''.
+ ($title?$title:$url).' ');
+ if ($url=~/^\/res\//) {
+ my $result=&Apache::lonnet::repcopy(
+ &Apache::lonnet::filelocation('',$url));
+ if ($result==OK) {
+ $r->print('ok');
+ $r->rflush();
+ my $dependencies=
+ &Apache::lonnet::metadata($url,'dependencies');
+ foreach (split(/\,/,$dependencies)) {
+ if (($_=~/^\/res\//) && (!$alreadyseen{$_})) {
+ &checkonthis($r,$_,$level+1);
+ }
+ }
+ } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {
+ $r->print('connection down');
+ } elsif ($result==HTTP_NOT_FOUND) {
+ $r->print('not found');
+ } else {
+ $r->print('access denied');
+ }
+ }
+ }
+}
+
# ================================================================ Main Handler
sub handler {
my $r = shift;
@@ -224,6 +285,116 @@ sub handler {
$r->send_http_header;
return OK if $r->header_only;
+
+ if ($ENV{'form.verify'}) {
+
+ my $loaderror=&Apache::lonnet::overloaderror($r);
+ if ($loaderror) { return $loaderror; }
+
+ $r->print('Verify Content'.
+ &Apache::loncommon::bodytag('Verify Course Documents'));
+ $hashtied=0;
+ undef %alreadyseen;
+ %alreadyseen=();
+ &tiehash();
+ foreach (keys %hash) {
+ if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) {
+ &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
+ }
+ }
+ &untiehash();
+ } elsif ($ENV{'form.versions'}) {
+ $r->print('Check Versions'.
+ &Apache::loncommon::bodytag('Check Course Document Versions'));
+ $hashtied=0;
+ &tiehash();
+ my %changes=&Apache::lonnet::dump
+ ('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ my $firstkey=(keys %changes)[0];
+ unless ($firstkey=~/^error\:/) {
+ unless ($ENV{'form.timerange'}) {
+ $ENV{'form.timerange'}=604800;
+ }
+ my $seltext='during the last '.$ENV{'form.timerange'}.' seconds';
+ my $startsel='';
+ my $monthsel='';
+ my $weeksel='';
+ my $daysel='';
+ if ($ENV{'form.timerange'}==-1) {
+ $seltext='since start of course';
+ $startsel='selected';
+ $ENV{'form.timerange'}=time;
+ }
+ my $starttime=time-$ENV{'form.timerange'};
+ if ($ENV{'form.timerange'}==2592000) {
+ $seltext='during the last month ('.localtime($starttime).')';
+ $monthsel='selected';
+ } elsif ($ENV{'form.timerange'}==604800) {
+ $seltext='during the last week ('.localtime($starttime).')';
+ $weeksel='selected';
+ } elsif ($ENV{'form.timerange'}==86400) {
+ $seltext='since yesterday ('.localtime($starttime).')';
+ $daysel='selected';
+ }
+
+ $r->print(<
+
+
+
+Content changed $seltext
+
+
+File | Modification Date |
+Version | Differences |
+ENDHEADERS
+ foreach (keys %changes) {
+ if ($changes{$_}>$starttime) {
+ my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
+ my $currentversion=&Apache::lonnet::getversion($_);
+ my $linkurl=&Apache::lonnet::clutter($_);
+ $r->print(
+ ''.$linkurl.
+ ' | '.
+ localtime($changes{$_}).' | '.$currentversion.' | '.
+ '');
+ my $lastold=1;
+ for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
+ $starttime) {
+ $lastold=$prevvers;
+ }
+ }
+ for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ $r->print('Version '.$prevvers.' ('.
+ localtime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
+ ')');
+ if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
+ $r->print(' Diffs');
+ }
+ $r->print(' ');
+ }
+ $r->print(' |
');
+ }
+ }
+ $r->print('
');
+ } else {
+ $r->print('No content modifications yet.
');
+ }
+ &untiehash();
+ } else {
# is this a standard course?
my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);
@@ -270,6 +441,8 @@ sub handler {
$iconpath = $r->dir_config('lonIconsURL') . "/";
+ my $now=time;
+
# print screen
$r->print(<
@@ -295,6 +468,20 @@ function makenewext(targetname) {
window.open('/adm/rat/extpickframe.html');
}
+function makesmppage() {
+ var title=prompt('Listed Title for the Page');
+ this.document.forms.newsmppg.importdetail.value=
+ title+'=/adm/$udom/$uname/$now/smppg';
+ this.document.forms.newsmppg.submit();
+}
+
+function makebulboard() {
+ var title=prompt('Listed Title for the Bulletin Board');
+ this.document.forms.newbul.importdetail.value=
+ title+'=/adm/$udom/$uname/$now/bulletinboard';
+ this.document.forms.newbul.submit();
+}
+
function finishpick() {
var title=this.document.forms.extimport.title.value;
var url=this.document.forms.extimport.url.value;
@@ -310,9 +497,18 @@ ENDNEWSCRIPT
$r->print(''.
&Apache::loncommon::bodytag('Course Documents','',$events));
unless ($showdoc) {
+ if ($allowed) {
+ $r->print(<
+
+
+
+ENDCOURSEVERIFY
+ }
# --------------------------------------------------------- Standard documents
+ $r->print('
ENDFORM
- $r->print('
');
+ $r->print('');
}
# ----------------------------------------------------- Supplemental documents
if (!$forcestandard) {
- $r->print('Supplemental Course Documents
');
+ $r->print(
+ 'Supplemental Course Documents');
my $folder=$ENV{'form.folder'};
unless ($folder=~/supplemental/) { $folder='supplemental'; }
&editor($r,$coursenum,$coursedom,$folder,$allowed);
@@ -458,20 +669,22 @@ value="$plainname=/adm/$udom/$uname/abou
|
-
+
ENDSUPFORM
}
}
if ($allowed) {
$r->print('');
}
+ $r->print('');
} else {
# -------------------------------------------------------- This is showdoc mode
$r->print("Uploaded Document
It is recommended that you use an up-to-date virus scanner before handling this file.
".
&entryline(0,"Click to download or use your browser's Save Link function",$showdoc).'
');
}
- $r->print('