--- loncom/interface/londocs.pm 2002/08/26 12:44:45 1.10
+++ loncom/interface/londocs.pm 2002/10/16 19:15:55 1.29
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.10 2002/08/26 12:44:45 www Exp $
+# $Id: londocs.pm,v 1.29 2002/10/16 19:15:55 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,14 +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
@@ -54,20 +61,28 @@ sub storemap {
my ($coursenum,$coursedom,$map)=@_;
return
&Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
- $map);
+ $map,1);
}
sub editor {
my ($r,$coursenum,$coursedom,$folder,$allowed)=@_;
+ if ($ENV{'form.foldername'}) {
+ $r->print('
Folder: '.$ENV{'form.foldername'}.'
');
+ }
my $errtext='';
my $fatal=0;
($errtext,$fatal)=
&mapread($coursenum,$coursedom,$folder.'.sequence');
+ if ($#Apache::lonratedt::order<1) {
+ $Apache::lonratedt::order[0]=1;
+ $Apache::lonratedt::resources[1]='';
+ }
if ($fatal) {
$r->print('
'.$errtext.'
');
} else {
# ------------------------------------------------------------ Process commands
- if ($allowed) {
+# ---------------- if they are for this folder and user allowed to make changes
+ if (($allowed) && ($ENV{'form.folder'} eq $folder)) {
# upload a file, if present
if (($ENV{'form.uploaddoc.filename'}) &&
($ENV{'form.cmd'}=~/^upload_(\w+)/)) {
@@ -82,6 +97,10 @@ sub editor {
$comment=~s/\\<\;/g;
$comment=~s/\>/\>\;/g;
$comment=~s/\:/\:/g;
+ if ($folder=~/^supplemental/) {
+ $comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'.
+ $ENV{'user.domain'}.'___&&&___'.$comment;
+ }
my $newidx=$#Apache::lonratedt::resources+1;
$Apache::lonratedt::resources[$newidx]=
$comment.':'.$url.':'.$ext.':normal:res';
@@ -112,7 +131,30 @@ sub editor {
# Store the changed version
&storemap($coursenum,$coursedom,$folder.'.sequence');
}
- }
+# Group import/search
+ if ($ENV{'form.importdetail'}) {
+ foreach (split(/\&/,$ENV{'form.importdetail'})) {
+ if (defined($_)) {
+ my ($name,$url)=split(/\=/,$_);
+ $name=&Apache::lonnet::unescape($name);
+ $url=&Apache::lonnet::unescape($url);
+ if ($url) {
+ my $idx=$#Apache::lonratedt::resources+1;
+ $Apache::lonratedt::order
+ [$#Apache::lonratedt::order+1]=$idx;
+ my $ext='false';
+ if ($url=~/^http\:\/\//) { $ext='true'; }
+ $url=~s/\:/\:/g;
+ $Apache::lonratedt::resources[$idx]=
+ $name.':'.$url.':'.$ext.':normal:res';
+ }
+ }
+ }
+# Store the changed version
+ &storemap($coursenum,$coursedom,$folder.'.sequence');
+ }
+ }
+# ---------------------------------------------------------------- End commands
# ---------------------------------------------------------------- Print screen
my $idx=0;
$r->print('
";
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;
@@ -168,81 +285,320 @@ 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;
+ &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();
+
+ &untiehash();
+ } else {
# is this a standard course?
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder']);
my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);
- my $forcestandard=($ENV{'form.folder'}=~/^default_/);
- my $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
+ my $forcestandard;
+ my $forcesupplement;
+ my $script='';
+ my $allowed;
+ my $events='';
+ my $showdoc=0;
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['folder','foldername']);
+ if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
+ $showdoc=$1;
+ }
+ unless ($showdoc) { # got called from remote
+ $forcestandard=($ENV{'form.folder'}=~/^default_/);
+ $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
# does this user have privileges to post, etc?
- my $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
- my $script='';
- if ($allowed) {
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
- $script=&Apache::lonratedt::editscript('docs');
+ $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
+ if ($allowed) {
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
+ $script=&Apache::lonratedt::editscript('simple');
+ }
+ } else { # got called in sequence from course
+ $allowed=0;
+ $script=''.&Apache::lonxml::registerurl(1,undef).'
-
+
ENDDOCUMENT
-$r->print(&Apache::loncommon::bodytag('Course Documents'));
-# --------------------------------------------------0------ Standard documents
+ if ($allowed) {
+ $r->print(<
+function makenewfolder(targetform,folderseq) {
+ var foldername=prompt('Name of New Folder','New Folder');
+ if (foldername) {
+ targetform.importdetail.value=foldername+"="+folderseq;
+ targetform.submit();
+ }
+}
+
+function makenewext(targetname) {
+ this.document.forms.extimport.useform.value=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;
+ var form=this.document.forms.extimport.useform.value;
+ eval
+ ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+
+ '";this.document.forms.'+form+'.submit();');
+}
+
+ENDNEWSCRIPT
+ }
+# -------------------------------------------------------------------- Body tag
+ $r->print(''.
+ &Apache::loncommon::bodytag('Course Documents','',$events));
+ unless ($showdoc) {
+ if ($allowed) {
+ $r->print(<
+
+
+
+ENDCOURSEVERIFY
+ }
+# --------------------------------------------------------- Standard documents
+ $r->print('
');
if (($standard) && ($allowed) && (!$forcesupplement)) {
- $r->print('
Main Course Documents
');
+ $r->print('
Main Course Documents
');
my $folder=$ENV{'form.folder'};
unless ($folder=~/^default/) { $folder='default'; }
&editor($r,$coursenum,$coursedom,$folder,$allowed);
+ my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
+ '.sequence';
$r->print(<Post a new main course document
+