--- loncom/interface/londocs.pm 2002/11/18 15:21:31 1.37
+++ loncom/interface/londocs.pm 2003/05/29 01:26:33 1.57
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.37 2002/11/18 15:21:31 www Exp $
+# $Id: londocs.pm,v 1.57 2003/05/29 01:26:33 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,20 +126,25 @@ 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=$ENV{'form.title'};
+ my $comment=
+ &HTML::Entities::decode($ENV{'form.title'});
$comment=~s/\\<\;/g;
$comment=~s/\>/\>\;/g;
$comment=~s/\:/\:/g;
@@ -157,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';
}
@@ -165,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
@@ -174,7 +202,7 @@ sub editor {
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
unless ($name) { $name=(split(/\//,$url))[-1]; }
unless ($name) { $name='NO RESOURCE'; $url='/adm/notfound.html'; }
- $r->print(&entryline($idx,$name,$url,$folder,$allowed));
+ $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_));
$idx++;
}
$r->print('');
@@ -184,21 +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
@@ -220,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.=' | '.
@@ -262,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(' ');
@@ -327,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);
@@ -445,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']);
@@ -463,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(<
+
+
+
+
+