--- loncom/interface/londocs.pm 2002/10/18 13:47:57 1.32
+++ loncom/interface/londocs.pm 2003/06/16 13:51:46 1.61
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.32 2002/10/18 13:47:57 www Exp $
+# $Id: londocs.pm,v 1.61 2003/06/16 13:51:46 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,7 @@ use Apache::loncommon;
use Apache::lonratedt;
use Apache::lonratsrv;
use Apache::lonxml;
+use HTML::Entities;
use GDBM_File;
my $iconpath;
@@ -44,6 +45,12 @@ my %hash;
my $hashtied;
my %alreadyseen=();
+my $hadchanges;
+
+# Available help topics
+
+my %help=();
+
# Mapread read maps into lonratedt::global arrays
# @order and @resources, determines status
# sets @order - pointer to resources in right order
@@ -59,6 +66,7 @@ sub mapread {
sub storemap {
my ($coursenum,$coursedom,$map)=@_;
+ $hadchanges=1;
return
&Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
$map,1);
@@ -118,15 +126,32 @@ sub editor {
}
$#Apache::lonratedt::order--;
} elsif ($cmd eq 'up') {
+ if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) {
my $i=$Apache::lonratedt::order[$idx-1];
$Apache::lonratedt::order[$idx-1]=
$Apache::lonratedt::order[$idx];
$Apache::lonratedt::order[$idx]=$i;
+ }
} elsif ($cmd eq 'down') {
+ if (defined($Apache::lonratedt::order[$idx+1])) {
my $i=$Apache::lonratedt::order[$idx+1];
$Apache::lonratedt::order[$idx+1]=
$Apache::lonratedt::order[$idx];
$Apache::lonratedt::order[$idx]=$i;
+ }
+ } elsif ($cmd eq 'rename') {
+ my ($rtitle,@rrest)=split(/\:/,
+ $Apache::lonratedt::resources[
+ $Apache::lonratedt::order[$idx]]);
+ my $comment=
+ &HTML::Entities::decode($ENV{'form.title'});
+ $comment=~s/\\<\;/g;
+ $comment=~s/\>/\>\;/g;
+ $comment=~s/\:/\:/g;
+ $Apache::lonratedt::resources[
+ $Apache::lonratedt::order[$idx]]=
+ $comment.':'.join(':',@rrest);
+
}
# Store the changed version
&storemap($coursenum,$coursedom,$folder.'.sequence');
@@ -145,6 +170,7 @@ sub editor {
my $ext='false';
if ($url=~/^http\:\/\//) { $ext='true'; }
$url=~s/\:/\:/g;
+ $name=~s/\:/\:/g;
$Apache::lonratedt::resources[$idx]=
$name.':'.$url.':'.$ext.':normal:res';
}
@@ -153,6 +179,20 @@ sub editor {
# Store the changed version
&storemap($coursenum,$coursedom,$folder.'.sequence');
}
+# Loading a complete map
+ if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) {
+ foreach
+(&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {
+ my $idx=$#Apache::lonratedt::resources;
+ $idx++;
+ $Apache::lonratedt::resources[$idx]=$_;
+ $Apache::lonratedt::order
+ [$#Apache::lonratedt::order+1]=$idx;
+ }
+
+# Store the changed version
+ &storemap($coursenum,$coursedom,$folder.'.sequence');
+ }
}
# ---------------------------------------------------------------- End commands
# ---------------------------------------------------------------- Print screen
@@ -161,8 +201,8 @@ sub editor {
foreach (@Apache::lonratedt::order) {
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
unless ($name) { $name=(split(/\//,$url))[-1]; }
- unless ($name) { $name='EMPTY'; }
- $r->print(&entryline($idx,$name,$url,$folder,$allowed));
+ unless ($name) { $name='NO RESOURCE'; $url='/adm/notfound.html'; }
+ $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_));
$idx++;
}
$r->print('');
@@ -172,18 +212,38 @@ sub editor {
# --------------------------------------------------------------- An entry line
sub entryline {
- my ($index,$title,$url,$folder,$allowed)=@_;
+ my ($index,$title,$url,$folder,$allowed,$residx)=@_;
+ $title=~s/\&colon\;/\:/g;
+ $title=&HTML::Entities::encode(&HTML::Entities::decode(
+ &Apache::lonnet::unescape($title)),'\"\<\>\&\'');
+ my $renametitle=$title;
+ my $foldertitle=$title;
+ if ($title=~
+ /^(\d+)\_\_\_\&\;\&\;\&\;\_\_\_(\w+)\_\_\_\&\;\&\;\&\;\_\_\_(\w+)\_\_\_\&\;\&\;\&\;\_\_\_(.*)$/
+ ) {
+ $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
+ $renametitle=$4;
+ $title=''.localtime($1).' '.
+ &Apache::loncommon::plainname($2,$3).':
'.
+ $foldertitle;
+ }
+ $renametitle=~s/\"\;/\\\"/g;
my $line='
';
# Edit commands
if ($allowed) {
$line.=(<
+
+Remove
+
+Rename |
END
}
# Figure out what kind of a resource this is
@@ -205,18 +265,18 @@ END
}
}
$url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//;
-# Title
- $title=&Apache::lonnet::unescape($title);
- my $foldertitle=$title;
- if ($title=~
- /^(\d+)\_\_\_\&\&\&\_\_\_(\w+)\_\_\_\&\&\&\_\_\_(\w+)\_\_\_\&\&\&\_\_\_(.*)$/
- ) {
- $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
- $title=''.localtime($1).' '.
- &Apache::loncommon::plainname($2,$3).':
'.
- $foldertitle;
- }
- if ($isfolder) { $url.='&foldername='.$foldertitle; }
+ if ($residx) {
+ $url.=(($url=~/\?/)?'&':'?').'symb='.
+ &Apache::lonnet::escape(&Apache::lonnet::symbclean(
+ &Apache::lonnet::declutter('uploaded/'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/'.$folder.
+ '.sequence').
+ '___'.$residx.'___'.
+ &Apache::lonnet::declutter($url)));
+ }
+ if ($isfolder) { $url.='&foldername='.
+ &Apache::lonnet::escape($foldertitle); }
$line.=' | '.
@@ -247,7 +307,7 @@ sub checkonthis {
my ($r,$url,$level,$title)=@_;
$alreadyseen{$url}=1;
$r->rflush();
- if ($url) {
+ if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
$r->print('
');
for (my $i=0;$i<=$level*5;$i++) {
$r->print(' ');
@@ -260,6 +320,33 @@ sub checkonthis {
if ($result==OK) {
$r->print('ok');
$r->rflush();
+ &Apache::lonnet::countacc($url);
+ $url=~/\.(\w+)$/;
+ if (&Apache::loncommon::fileembstyle($1) eq 'ssi') {
+ $r->print('
');
+ $r->rflush();
+ for (my $i=0;$i<=$level*5;$i++) {
+ $r->print(' ');
+ }
+ $r->print('- Rendering: ');
+ &Apache::lonxml::xmlparse($r,'web',
+ &Apache::lonnet::getfile(
+ &Apache::lonnet::filelocation('',$url)));
+ if (($Apache::lonxml::errorcount) ||
+ ($Apache::lonxml::warningcount)) {
+ if ($Apache::lonxml::errorcount) {
+ $r->print(''.
+ $Apache::lonxml::errorcount.' error(s) ');
+ }
+ if ($Apache::lonxml::warningcount) {
+ $r->print(''.
+ $Apache::lonxml::warningcount.' warning(s)');
+ }
+ } else {
+ $r->print('ok');
+ }
+ $r->rflush();
+ }
my $dependencies=
&Apache::lonnet::metadata($url,'dependencies');
foreach (split(/\,/,$dependencies)) {
@@ -285,7 +372,15 @@ sub handler {
$r->send_http_header;
return OK if $r->header_only;
-
+# --------------------------------------------- Initialize help topics for this
+ foreach ('Adding_Course_Doc','Main_Course_Documents',
+ 'Adding_External_Resource','Navigate_Content',
+ 'Adding_Folders','Docs_Overview',
+ 'Creating_From_Template','Supplemental',
+ 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') {
+ $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
+ }
+
if ($ENV{'form.verify'}) {
my $loaderror=&Apache::lonnet::overloaderror($r);
@@ -377,7 +472,14 @@ ENDHEADERS
$r->print('Version '.$prevvers.' ('.
localtime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
- ')
');
+ ')');
+ if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
+ $r->print(' Diffs');
+ }
+ $r->print('
');
}
$r->print('
');
}
@@ -396,6 +498,7 @@ ENDHEADERS
my $script='';
my $allowed;
my $events='';
+ my $buttons='';
my $showdoc=0;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['folder','foldername']);
@@ -414,9 +517,10 @@ ENDHEADERS
}
} else { # got called in sequence from course
$allowed=0;
- $script=''.&Apache::lonxml::registerurl(1,undef).''.&Apache::lonmenu::registerurl(1,undef).'
+
ENDNEWSCRIPT
}
# -------------------------------------------------------------------- Body tag
$r->print(''.
- &Apache::loncommon::bodytag('Course Documents','',$events));
+ &Apache::loncommon::bodytag('Course Documents','',$events).
+ $buttons);
unless ($showdoc) {
if ($allowed) {
+ $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
+ 'Editing the Table of Contents for your Course'));
$r->print(<
+
+
+
+
+