--- loncom/interface/londocs.pm 2003/09/15 15:24:18 1.78
+++ loncom/interface/londocs.pm 2006/11/29 21:00:35 1.260
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.78 2003/09/15 15:24:18 www Exp $
+# $Id: londocs.pm,v 1.260 2006/11/29 21:00:35 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -30,14 +30,19 @@ package Apache::londocs;
use strict;
use Apache::Constants qw(:common :http);
+use Apache::imsexport;
use Apache::lonnet;
use Apache::loncommon;
-use Apache::lonratedt;
-use Apache::lonratsrv;
+use LONCAPA::map();
+use Apache::lonratedt();
use Apache::lonxml;
-use Apache::loncreatecourse;
+use Apache::lonclonecourse;
+use Apache::lonnavmaps;
use HTML::Entities;
use GDBM_File;
+use Apache::lonlocal;
+use Cwd;
+use LONCAPA;
my $iconpath;
@@ -52,7 +57,7 @@ my $hadchanges;
my %help=();
-# Mapread read maps into lonratedt::global arrays
+# Mapread read maps into LONCAPA::map:: global arrays
# @order and @resources, determines status
# sets @order - pointer to resources in right order
# sets @resources - array with the resources with correct idx
@@ -61,16 +66,19 @@ my %help=();
sub mapread {
my ($coursenum,$coursedom,$map)=@_;
return
- &Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
- $map);
+ &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
+ $map);
}
sub storemap {
my ($coursenum,$coursedom,$map)=@_;
+ my ($outtext,$errtext)=
+ &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
+ $map,1);
+ if ($errtext) { return ($errtext,2); }
+
$hadchanges=1;
- return
- &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
- $map,1);
+ return ($errtext,0);
}
# ----------------------------------------- Return hash with valid author names
@@ -79,27 +87,29 @@ sub authorhosts {
my %outhash=();
my $home=0;
my $other=0;
- foreach (keys %ENV) {
+ foreach (keys %env) {
if ($_=~/^user\.role\.(au|ca)\.(.+)$/) {
my $role=$1;
my $realm=$2;
- my ($start,$end)=split(/\./,$ENV{$_});
+ my ($start,$end)=split(/\./,$env{$_});
if (($start) && ($start>time)) { next; }
if (($end) && (time>$end)) { next; }
my $ca; my $cd;
if ($1 eq 'au') {
- $ca=$ENV{'user.name'};
- $cd=$ENV{'user.domain'};
+ $ca=$env{'user.name'};
+ $cd=$env{'user.domain'};
} else {
($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/);
}
- if (&Apache::lonnet::homeserver($ca,$cd) eq
- $Apache::lonnet::perlvar{'lonHostID'}) {
+ my $allowed=0;
+ my $myhome=&Apache::lonnet::homeserver($ca,$cd);
+ my @ids=&Apache::lonnet::current_machine_ids();
+ foreach my $id (@ids) { if ($id eq $myhome) { $allowed=1; } }
+ if ($allowed) {
$home++;
$outhash{'home_'.$ca.'@'.$cd}=1;
} else {
- $outhash{'otherhome_'.$ca.'@'.$cd}=
- &Apache::lonnet::homeserver($ca,$cd);
+ $outhash{'otherhome_'.$ca.'@'.$cd}=$myhome;
$other++;
}
}
@@ -110,39 +120,95 @@ sub authorhosts {
sub dumpbutton {
my ($home,$other,%outhash)=&authorhosts();
+ my $type = &Apache::loncommon::course_type();
if ($home+$other==0) { return ''; }
my $output='
';
if ($home) {
return ' '.
- ' ';
+ ' '.
+ &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs');
} else {
return' '.
- 'Dump Course DOCS to Construction Space: available on other servers';
+ &mt('Dump '.$type.
+ ' DOCS to Construction Space: available on other servers');
}
}
+sub clean {
+ my ($title)=@_;
+ $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs;
+ return $title;
+}
# -------------------------------------------------------- Actually dump course
sub dumpcourse {
- my $r=shift;
- $r->print('Dump DOCS '.
- &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space').
+ my ($r) = @_;
+ my $type = &Apache::loncommon::course_type();
+ $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
'
+$selectbox
+
+
+$lt{'rm'}
+
+$lt{'ct'}
+
+$lt{'rn'}
+$copylink
END
+ } else {
+ unless ($nocopy) {
+ $copylink=(<
+$lt{'cp'}
+ENDCOPY
+ }
+ $line.=(<
+
+
+
+
+
+
+
+
+
+
+
+
+
+$selectbox
+
+
+$lt{'rm'}
+
+$lt{'ct'}
+
+$lt{'rn'}
+$copylink
+END
+ }
}
# Figure out what kind of a resource this is
my ($extension)=($url=~/\.(\w+)$/);
my $uploaded=($url=~/^\/*uploaded\//);
- my $icon='unknown';
- if (-e "/home/httpd/html/adm/lonIcons/$extension.gif") {
- $icon=$extension;
- }
+ my $icon=&Apache::loncommon::icon($url);
my $isfolder=0;
+ my $ispage=0;
+ my $folderarg;
+ my $pagearg;
+ my $pagefile;
if ($uploaded) {
- if ($extension eq 'sequence') {
- $icon='folder_closed';
- $url=~/\/(\w+)\.sequence/;
- $url='/adm/coursedocs?folder='.$1;
- $isfolder=1;
- } else {
- $url=&Apache::lonnet::tokenwrapper($url);
- }
+ if ($extension eq 'sequence') {
+ $icon=$iconpath.'/folder_closed.gif';
+ $url=~/$coursenum\/([\/\w]+)\.sequence$/;
+ $url='/adm/coursedocs?';
+ $folderarg=$1;
+ $isfolder=1;
+ } elsif ($extension eq 'page') {
+ $icon=$iconpath.'/page.gif';
+ $url=~/$coursenum\/([\/\w]+)\.page$/;
+ $pagearg=$1;
+ $url='/adm/coursedocs?';
+ $ispage=1;
+ } else {
+ &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);
+ }
}
- $url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//;
- if (($residx) && ($folder!~/supplemental/)) {
- $url.=(($url=~/\?/)?'&':'?').'symb='.
- &Apache::lonnet::escape(&Apache::lonnet::symbclean(
+ $url=~s-^http(\&colon\;|:)//-/adm/wrapper/ext/-;
+ if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
+ my $symb=&Apache::lonnet::symbclean(
&Apache::lonnet::declutter('uploaded/'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/'.$folder.
+ $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
+ $env{'course.'.$env{'request.course.id'}.'.num'}.'/'.$folder.
'.sequence').
'___'.$residx.'___'.
- &Apache::lonnet::declutter($url)));
+ &Apache::lonnet::declutter($url));
+ (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
+ $url=&Apache::lonnet::clutter($url);
+ if ($url=~/^\/*uploaded\//) {
+ $url=~/\.(\w+)$/;
+ my $embstyle=&Apache::loncommon::fileembstyle($1);
+ if (($embstyle eq 'img') || ($embstyle eq 'emb')) {
+ $url='/adm/wrapper'.$url;
+ } elsif ($embstyle eq 'ssi') {
+ #do nothing with these
+ } elsif ($url!~/\.(sequence|page)$/) {
+ $url='/adm/coursedocs/showdoc'.$url;
+ }
+ } elsif ($url=~m|^/ext/|) {
+ $url='/adm/wrapper'.$url;
+ }
+ if (&Apache::lonnet::symbverify($symb,$url)) {
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+ } else {
+ $url='';
+ }
+ if ($container eq 'page') {
+ my $symb=$env{'form.pagesymb'};
+
+ $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+ }
}
- if ($isfolder) { $url.='&foldername='.
- &Apache::lonnet::escape($foldertitle); }
- $line.=' '.
- "$title ";
+ my $parameterset=' ';
+ if ($isfolder || $extension eq 'sequence') {
+ my $foldername=&escape($foldertitle);
+ my $folderpath=$env{'form.folderpath'};
+ if ($folderpath) { $folderpath.='&' };
+# Append randompick number, hidden, and encrypted with ":" to foldername,
+# so it gets transferred between levels
+ $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,
+ 'parameter_randompick'))[0]
+ .':'.((&LONCAPA::map::getparameter($orderidx,
+ 'parameter_hiddenresource'))[0]=~/^yes$/i)
+ .':'.((&LONCAPA::map::getparameter($orderidx,
+ 'parameter_encrypturl'))[0]=~/^yes$/i);
+ $url.='folderpath='.&escape($folderpath).$cpinfo;
+ $parameterset=''.&mt('Randomly Pick: ').
+ ' '.
+''.&mt('Store').' ';
+
+ }
+ if ($ispage) {
+ my $pagename=&escape($pagetitle);
+ my $pagepath;
+ my $folderpath=$env{'form.folderpath'};
+ if ($folderpath) { $pagepath = $folderpath.'&' };
+ $pagepath.=$pagearg.'&'.$pagename;
+ my $symb=$env{'form.pagesymb'};
+ if (!$symb) {
+ my $path='uploaded/'.
+ $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
+ $env{'course.'.$env{'request.course.id'}.'.num'}.'/';
+ $symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence',
+ $residx,
+ $path.$pagearg.'.page');
+ }
+ $url.='pagepath='.&escape($pagepath).
+ '&pagesymb='.&escape($symb).$cpinfo;
+ }
+ $line.=' '.
+ "".($url?"":'').$title.
+ ($url?' ':' '.&mt('(re-initialize course to access)').' ')." ";
+ if (($allowed) && ($folder!~/^supplemental/)) {
+ my %lt=&Apache::lonlocal::texthash(
+ 'hd' => 'Hidden',
+ 'ec' => 'URL hidden');
+ my $enctext=
+ ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
+ my $hidtext=
+ ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
+ $line.=(<
+ $lt{'hd'}
+
+ $lt{'ec'}
+$parameterset
+ENDPARMS
+ }
+ $line.="";
return $line;
}
# ---------------------------------------------------------------- tie the hash
sub tiehash {
+ my ($mode)=@_;
$hashtied=0;
- if ($ENV{'request.course.fn'}) {
- if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
- &GDBM_READER(),0640)) {
+ if ($env{'request.course.fn'}) {
+ if ($mode eq 'write') {
+ if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db",
+ &GDBM_WRCREAT(),0640)) {
+ $hashtied=2;
+ }
+ } else {
+ if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db",
+ &GDBM_READER(),0640)) {
$hashtied=1;
- }
+ }
+ }
}
}
sub untiehash {
if ($hashtied) { untie %hash; }
$hashtied=0;
+ return OK;
}
# --------------------------------------------------------------- check on this
sub checkonthis {
my ($r,$url,$level,$title)=@_;
+ $url=&unescape($url);
$alreadyseen{$url}=1;
$r->rflush();
if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
- $r->print(' ');
+ $r->print("\n ");
for (my $i=0;$i<=$level*5;$i++) {
$r->print(' ');
}
@@ -444,8 +1932,8 @@ sub checkonthis {
if ($url=~/^\/res\//) {
my $result=&Apache::lonnet::repcopy(
&Apache::lonnet::filelocation('',$url));
- if ($result==OK) {
- $r->print('ok ');
+ if ($result eq 'ok') {
+ $r->print(''.&mt('ok').' ');
$r->rflush();
&Apache::lonnet::countacc($url);
$url=~/\.(\w+)$/;
@@ -455,25 +1943,25 @@ sub checkonthis {
for (my $i=0;$i<=$level*5;$i++) {
$r->print(' ');
}
- $r->print('- Rendering: ');
- my $oldpath=$ENV{'request.filename'};
- $ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url);
- &Apache::lonxml::xmlparse($r,'web',
- &Apache::lonnet::getfile(
- &Apache::lonnet::filelocation('',$url)));
- $ENV{'request.filename'}=$oldpath;
- if (($Apache::lonxml::errorcount) ||
- ($Apache::lonxml::warningcount)) {
- if ($Apache::lonxml::errorcount) {
- $r->print(''.
- $Apache::lonxml::errorcount.' error(s) ');
+ $r->print('- '.&mt('Rendering').': ');
+ my ($errorcount,$warningcount)=split(/:/,
+ &Apache::lonnet::ssi_body($url,
+ ('grade_target'=>'web',
+ 'return_only_error_and_warning_counts' => 1)));
+ if (($errorcount) ||
+ ($warningcount)) {
+ if ($errorcount) {
+ $r->print(''.
+ $errorcount.' '.
+ &mt('error(s)').' ');
}
- if ($Apache::lonxml::warningcount) {
+ if ($warningcount) {
$r->print(''.
- $Apache::lonxml::warningcount.' warning(s) ');
+ $warningcount.' '.
+ &mt('warning(s)').'');
}
} else {
- $r->print('ok ');
+ $r->print(''.&mt('ok').' ');
}
$r->rflush();
}
@@ -484,12 +1972,16 @@ sub checkonthis {
&checkonthis($r,$_,$level+1);
}
}
- } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {
- $r->print('connection down ');
- } elsif ($result==HTTP_NOT_FOUND) {
- $r->print('not found ');
+ } elsif ($result eq 'unavailable') {
+ $r->print(''.&mt('connection down').' ');
+ } elsif ($result eq 'not_found') {
+ unless ($url=~/\$/) {
+ $r->print(''.&mt('not found').' ');
+ } else {
+ $r->print(''.&mt('unable to verify variable URL').' ');
+ }
} else {
- $r->print('access denied ');
+ $r->print(''.&mt('access denied').' ');
}
}
}
@@ -497,495 +1989,920 @@ sub checkonthis {
#
+# ----------------------------------------------------------------- List Symbs
+#
+sub list_symbs {
+ my ($r) = @_;
+
+ $r->print(&Apache::loncommon::start_page('Symb List'));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ $r->print("\n");
+ foreach my $res ($navmap->retrieveResources()) {
+ $r->print($res->compTitle()."\t".$res->symb()."\n");
+ }
+ $r->print("\n \n");
+ $r->print(''.&mt('Return to DOCS').' ');
+}
+
+
+#
# -------------------------------------------------------------- Verify Content
#
sub verifycontent {
- my $r=shift;
+ my ($r) = @_;
+ my $type = &Apache::loncommon::course_type();
my $loaderror=&Apache::lonnet::overloaderror($r);
if ($loaderror) { return $loaderror; }
-
- $r->print('Verify Content '.
- &Apache::loncommon::bodytag('Verify Course Documents'));
+ $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));
$hashtied=0;
undef %alreadyseen;
%alreadyseen=();
&tiehash();
foreach (keys %hash) {
- if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) {
+ if ($hash{$_}=~/\.(page|sequence)$/) {
+ if (($_=~/^src_/) && ($alreadyseen{&unescape($hash{$_})})) {
+ $r->print(''.
+ &mt('The following sequence or page is included more than once in your '.$type.': ').
+ &unescape($hash{$_}).' '.
+ &mt('Note that grading records for problems included in this sequence or folder will overlap. '));
+ }
+ }
+ if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$_})})) {
&checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
}
}
&untiehash();
- $r->print('Done. ');
+ $r->print(''.&mt('Done').'. '.''.
+ &mt('Return to DOCS').' ');
}
+
# -------------------------------------------------------------- Check Versions
+sub devalidateversioncache {
+ my $src=shift;
+ &Apache::lonnet::devalidate_cache_new('courseresversion',$env{'request.course.id'}.'_'.
+ &Apache::lonnet::clutter($src));
+}
+
sub checkversions {
- my $r=shift;
- $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';
- }
+ my ($r) = @_;
+ my $type = &Apache::loncommon::course_type();
+ $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions"));
+ my $header='';
+ my $startsel='';
+ my $monthsel='';
+ my $weeksel='';
+ my $daysel='';
+ my $allsel='';
+ my %changes=();
+ my $starttime=0;
+ my $haschanged=0;
+ my %setversions=&Apache::lonnet::dump('resourceversions',
+ $env{'course.'.$env{'request.course.id'}.'.domain'},
+ $env{'course.'.$env{'request.course.id'}.'.num'});
- $r->print(<0) {
+ $newsetversions{$1}=$getvers;
+ &devalidateversioncache($1);
+ }
+ }
+ }
+ } elsif ($env{'form.setversions'}) {
+ $haschanged=1;
+ foreach (keys %env) {
+ if ($_=~/^form\.set_version_(.+)$/) {
+ my $src=$1;
+ if (($env{$_}) && ($env{$_} ne $setversions{$src})) {
+ $newsetversions{$src}=$env{$_};
+ &devalidateversioncache($src);
+ }
+ }
+ }
+ }
+ if ($haschanged) {
+ if (&Apache::lonnet::put('resourceversions',\%newsetversions,
+ $env{'course.'.$env{'request.course.id'}.'.domain'},
+ $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {
+ $r->print(''.&mt('Your Version Settings have been Stored').' ');
+ } else {
+ $r->print(''.&mt('An Error Occured while Attempting to Store your Version Settings').' ');
+ }
+ &mark_hash_old();
+ }
+ &changewarning($r,'');
+ if ($env{'form.timerange'} eq 'all') {
+# show all documents
+ $header=&mt('All Documents in '.$type);
+ $allsel=1;
+ foreach (keys %hash) {
+ if ($_=~/^ids\_(\/res\/.+)$/) {
+ my $src=$1;
+ $changes{$src}=1;
+ }
+ }
+ } else {
+# show documents which changed
+ %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=&mt('during the last').' '.$env{'form.timerange'}.' '
+ .&mt('seconds');
+ if ($env{'form.timerange'}==-1) {
+ $seltext='since start of course';
+ $startsel='selected';
+ $env{'form.timerange'}=time;
+ }
+ $starttime=time-$env{'form.timerange'};
+ if ($env{'form.timerange'}==2592000) {
+ $seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+ $monthsel='selected';
+ } elsif ($env{'form.timerange'}==604800) {
+ $seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+ $weeksel='selected';
+ } elsif ($env{'form.timerange'}==86400) {
+ $seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
+ $daysel='selected';
+ }
+ $header=&mt('Content changed').' '.$seltext;
+ } else {
+ $header=&mt('No content modifications yet.');
+ }
+ }
+ %setversions=&Apache::lonnet::dump('resourceversions',
+ $env{'course.'.$env{'request.course.id'}.'.domain'},
+ $env{'course.'.$env{'request.course.id'}.'.num'});
+ my %lt=&Apache::lonlocal::texthash
+ ('st' => 'Version changes since start of '.$type,
+ 'lm' => 'Version changes since last Month',
+ 'lw' => 'Version changes since last Week',
+ 'sy' => 'Version changes since Yesterday',
+ 'al' => 'All Resources (possibly large output)',
+ 'sd' => 'Display',
+ 'fi' => 'File',
+ 'md' => 'Modification Date',
+ 'mr' => 'Most recently published Version',
+ 've' => 'Version used in '.$type,
+ 'vu' => 'Set Version to be used in '.$type,
+'sv' => 'Set Versions to be used in '.$type.' according to Selections below',
+'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
+'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
+ 'di' => 'Differences');
+ $r->print(<
+
+
+
-Since Start of Course
-Last Month
-Last Week
-Since Yesterday
+$lt{'al'}
+$lt{'st'}
+$lt{'lm'}
+$lt{'lw'}
+$lt{'sy'}
-
-
-Content changed $seltext
-
-
-File Modification Date
-Version Differences
+
+$header
+
+
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;
- }
- }
+ foreach (sort keys %changes) {
+ if ($changes{$_}>$starttime) {
+ my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
+ my $currentversion=&Apache::lonnet::getversion($_);
+ if ($currentversion<0) {
+ $currentversion=&mt('Could not be determined.');
+ }
+ my $linkurl=&Apache::lonnet::clutter($_);
+ $r->print(
+ ' '.
+ &Apache::lonnet::gettitle($linkurl).
+ ' '.
+ ' '.
+ ''.
+ ''.$linkurl.
+ ' '.
+ ' '.
+ ''.
+ &Apache::lonlocal::locallocaltime(
+ &Apache::lonnet::metadata($root.'.'.$extension,
+ 'lastrevisiondate')
+ ).
+ ' '.
+ 'Most Recent: '.
+ ''.$currentversion.' '.
+ ' '.
+ 'In '.$type.': '.
+ '');
+# Used in course
+ my $usedversion=$hash{'version_'.$linkurl};
+ if (($usedversion) && ($usedversion ne 'mostrecent')) {
+ $r->print($usedversion);
+ } else {
+ $r->print($currentversion);
+ }
+ $r->print(' '.
+ 'Use: ');
+# Set version
+ $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
+ 'set_version_'.$linkurl,
+ ('select_form_order' =>
+ ['',1..$currentversion,'mostrecent'],
+ '' => '',
+ 'mostrecent' => 'most recent',
+ map {$_,$_} (1..$currentversion))));
+ $r->print(' ');
+ my $lastold=1;
+ for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
+ $starttime) {
+ $lastold=$prevvers;
+ }
+ }
+ #
+ # Code to figure out how many version entries should go in
+ # each of the four columns
+ my $entries_per_col = 0;
+ my $num_entries = ($currentversion-$lastold);
+ if ($num_entries % 4 == 0) {
+ $entries_per_col = $num_entries/4;
+ } else {
+ $entries_per_col = $num_entries/4 + 1;
+ }
+ my $entries_count = 0;
+ $r->print('');
+ my $cols_output = 1;
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') {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ $r->print(''.&mt('Version').' '.$prevvers.' ('.
+ &Apache::lonlocal::locallocaltime(
+ &Apache::lonnet::metadata($url,
+ 'lastrevisiondate')
+ ).
+ ')');
+ if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
$r->print(' Diffs ');
- }
- $r->print(' ');
- }
- $r->print(' ');
- }
- }
- $r->print('
');
- $r->print('Done. ');
- } else {
- $r->print('No content modifications yet.
');
- }
- &untiehash();
+ &Apache::lonnet::clutter($root.'.'.$extension).
+ '&versionone='.$prevvers.
+ '">'.&mt('Diffs').'');
+ }
+ $r->print(' ');
+ if (++$entries_count % $entries_per_col == 0) {
+ $r->print('');
+ if ($cols_output != 4) {
+ $r->print('');
+ $cols_output++;
+ }
+ }
+ }
+ while($cols_output++ < 4) {
+ $r->print(' ')
+ }
+ $r->print(' '."\n");
+ }
+ }
+ $r->print('
');
+ $r->print(''.&mt('Done').'. ');
+
+ &untiehash();
+}
+
+sub mark_hash_old {
+ my $retie_hash=0;
+ if ($hashtied) {
+ $retie_hash=1;
+ &untiehash();
+ }
+ &tiehash('write');
+ $hash{'old'}=1;
+ &untiehash();
+ if ($retie_hash) { &tiehash(); }
+}
+
+sub is_hash_old {
+ my $untie_hash=0;
+ if (!$hashtied) {
+ $untie_hash=1;
+ &tiehash();
+ }
+ my $return=$hash{'old'};
+ if ($untie_hash) { &untiehash(); }
+ return $return;
+}
+
+sub changewarning {
+ my ($r,$postexec,$message,$url)=@_;
+ if (!&is_hash_old()) { return; }
+ my $pathvar='folderpath';
+ my $path=&escape($env{'form.folderpath'});
+ if (!defined($url)) {
+ if (defined($env{'form.pagepath'})) {
+ $pathvar='pagepath';
+ $path=&escape($env{'form.pagepath'});
+ $path.='&pagesymb='.&escape($env{'form.pagesymb'});
+ }
+ $url='/adm/coursedocs?'.$pathvar.'='.$path;
+ }
+ my $course_type = &Apache::loncommon::course_type();
+ if (!defined($message)) {
+ $message='Changes will become active for your current session after [_1], or the next time you log in.';
+ }
+ $r->print("\n\n".
+''."\n".
+''.
+''.
+&mt($message,' ').
+$help{'Caching'}.' '."\n\n");
+}
+
+# =========================================== Breadcrumbs for special functions
+
+sub init_breadcrumbs {
+ my ($form,$text)=@_;
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",
+ text=>&Apache::loncommon::course_type()." Documents",
+ faq=>273,
+ bug=>'Instructor Interface',
+ help => 'Docs_Adding_Course_Doc'});
+ &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs?".$form.'=1',
+ text=>$text,
+ faq=>273,
+ bug=>'Instructor Interface'});
}
# ================================================================ Main Handler
sub handler {
my $r = shift;
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK if $r->header_only;
+ my $type = &Apache::loncommon::course_type();
# --------------------------------------------- Initialize help topics for this
- foreach ('Adding_Course_Doc','Main_Course_Documents',
- 'Adding_External_Resource','Navigate_Content',
- 'Adding_Folders','Docs_Overview', 'Load_Map',
- 'Supplemental', 'Score_Upload_Form',
- 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') {
- $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
- }
+ foreach ('Adding_Course_Doc','Main_Course_Documents',
+ 'Adding_External_Resource','Navigate_Content',
+ 'Adding_Folders','Docs_Overview', 'Load_Map',
+ 'Supplemental','Score_Upload_Form','Adding_Pages',
+ 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
+ 'Check_Resource_Versions','Verify_Content') {
+ $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
+ }
# Composite help files
$help{'Syllabus'} = &Apache::loncommon::help_open_topic(
'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
$help{'Simple Page'} = &Apache::loncommon::help_open_topic(
'Docs_About_Simple_Page,Docs_Editing_Templated_Pages');
+ $help{'Simple Problem'} = &Apache::loncommon::help_open_topic(
+ 'Option_Response_Simple');
$help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
$help{'My Personal Info'} = &Apache::loncommon::help_open_topic(
'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
+ $help{'Group Files'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
-
- if ($ENV{'form.verify'}) {
+
+# does this user have privileges to modify docs
+ my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
+ if ($allowed && $env{'form.verify'}) {
+ &init_breadcrumbs('verify','Verify Content');
&verifycontent($r);
- } elsif ($ENV{'form.versions'}) {
+ } elsif ($allowed && $env{'form.listsymbs'}) {
+ &init_breadcrumbs('listsymbs','List Symbs');
+ &list_symbs($r);
+ } elsif ($allowed && $env{'form.docslog'}) {
+ &init_breadcrumbs('docslog','Show Log');
+ &docs_change_log($r);
+ } elsif ($allowed && $env{'form.versions'}) {
+ &init_breadcrumbs('versions','Check/Set Resource Versions');
&checkversions($r);
- } elsif ($ENV{'form.dumpcourse'}) {
+ } elsif ($allowed && $env{'form.dumpcourse'}) {
+ &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space');
&dumpcourse($r);
+ } elsif ($allowed && $env{'form.exportcourse'}) {
+ &init_breadcrumbs('exportcourse','Export '.&Apache::loncommon::course_type().' to IMS');
+ &exportcourse($r);
} else {
# is this a standard course?
- my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);
- my $forcestandard;
+ my $standard=($env{'request.course.uri'}=~/^\/uploaded\//);
+ my $forcestandard = 0;
my $forcesupplement;
my $script='';
- my $allowed;
- my $events='';
my $showdoc=0;
+ my $containertag;
+ my $uploadtag;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['folder','foldername']);
+ ['folderpath','pagepath',
+ 'pagesymb','markedcopy_url',
+ 'markedcopy_title']);
+ if ($env{'form.folderpath'}) {
+ my (@folderpath)=split('&',$env{'form.folderpath'});
+ $env{'form.foldername'}=&unescape(pop(@folderpath));
+ $env{'form.folder'}=pop(@folderpath);
+ }
+ if ($env{'form.pagepath'}) {
+ my (@pagepath)=split('&',$env{'form.pagepath'});
+ $env{'form.pagename'}=&unescape(pop(@pagepath));
+ $env{'form.folder'}=pop(@pagepath);
+ $containertag = ' '.
+ ' ';
+ $uploadtag = ' '.
+ ' ';
+ }
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
- $showdoc=$1;
+ $showdoc='/'.$1;
}
unless ($showdoc) { # got called from remote
- $forcestandard=($ENV{'form.folder'}=~/^default_/);
- $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
+ if (($env{'form.folder'}=~/^(?:group|default)_/) ||
+ ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
+ $forcestandard = 1;
+ }
+ $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
-# does this user have privileges to post, etc?
- $allowed=&Apache::lonnet::allowed('mdc',$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::lonmenu::registerurl(1,undef).'
-ENDDOCUMENT
- 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 makeexamupload() {
- var title=prompt('Listed Title for the Uploaded Score');
- if (title) {
- this.document.forms.newexamupload.importdetail.value=
- title+'=/res/lib/templates/examupload.problem';
- this.document.forms.newexamupload.submit();
- }
-}
-
-function makesmppage() {
- var title=prompt('Listed Title for the Page');
- if (title) {
- this.document.forms.newsmppg.importdetail.value=
- title+'=/adm/$udom/$uname/$now/smppg';
- this.document.forms.newsmppg.submit();
- }
-}
-
-function makesmpproblem() {
- var title=prompt('Listed Title for the Problem');
- if (title) {
- this.document.forms.newsmpproblem.importdetail.value=
- title+'=/res/lib/templates/simpleproblem.problem';
- this.document.forms.newsmpproblem.submit();
- }
-}
-
-function makebulboard() {
- var title=prompt('Listed Title for the Bulletin Board');
- if (title) {
- 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();');
-}
-
-function changename(folder,index,oldtitle) {
- var title=prompt('New Title',oldtitle);
- if (title) {
- this.document.forms.renameform.title.value=title;
- this.document.forms.renameform.cmd.value='rename_'+index;
- this.document.forms.renameform.folder.value=folder;
- this.document.forms.renameform.submit();
- }
-}
-
-function removeres(folder,index,oldtitle) {
- if ((oldtitle=='NO RESOURCE') || (confirm('Remove "'+oldtitle+'"?'))) {
- this.document.forms.renameform.cmd.value='del_'+index;
- this.document.forms.renameform.folder.value=folder;
- this.document.forms.renameform.submit();
+ if ($allowed) {
+ $script .= &editing_js($udom,$uname);
}
-}
-
-
-ENDNEWSCRIPT
- }
# -------------------------------------------------------------------- Body tag
- $r->print(''.
- &Apache::loncommon::bodytag('Course Documents','',$events,
- '','',$showdoc));
- unless ($showdoc) {
+ $script = '';
+ $r->print(&Apache::loncommon::start_page("$type Documents", $script,
+ {'force_register' => $showdoc,}).
+ &Apache::loncommon::help_open_menu('','',273,'RAT'));
+
+ my %allfiles = ();
+ my %codebase = ();
+ my ($upload_result,$upload_output);
+ if ($allowed) {
+ if (($env{'form.uploaddoc.filename'}) && ($env{'form.cmd'}=~/^upload_(\w+)/)) {
+# Process file upload - phase one - upload and parse primary file.
+ $upload_result = &process_file_upload(\$upload_output,$coursenum,
+ $coursedom,\%allfiles,
+ \%codebase,$1);
+ if ($upload_result eq 'phasetwo') {
+ $r->print($upload_output);
+ }
+ } elsif ($env{'form.phasetwo'}) {
+ my %newname = ();
+ my %origname = ();
+ my %attribs = ();
+ my $updateflag = 0;
+ my $residx = $env{'form.newidx'};
+ my $primary_url = &unescape($env{'form.primaryurl'});
+# Process file upload - phase two - gather secondary files.
+ for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {
+ if ($env{'form.embedded_item_'.$i.'.filename'}) {
+ my $javacodebase;
+ $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);
+ $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});
+ if (exists($env{'form.embedded_codebase_'.$i})) {
+ $javacodebase = &unescape($env{'form.embedded_codebase_'.$i});
+ $origname{$i} =~ s#^\Q$javacodebase\E/##;
+ }
+ my @attributes = ();
+ if ($env{'form.embedded_attrib_'.$i} =~ /:/) {
+ @attributes = split/:/,$env{'form.embedded_attrib_'.$i};
+ } else {
+ @attributes = ($env{'form.embedded_attrib_'.$i});
+ }
+ foreach (@attributes) {
+ push(@{$attribs{$i}},&unescape($_));
+ }
+ if ($javacodebase) {
+ $codebase{$i} = $javacodebase;
+ $codebase{$i} =~ s#/$##;
+ $updateflag = 1;
+ }
+ }
+ unless ($newname{$i} eq $origname{$i}) {
+ $updateflag = 1;
+ }
+ }
+# Process file upload - phase three - modify primary file
+ if ($updateflag) {
+ my ($content,$rtncode);
+ my $updateflag = 0;
+ my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode);
+ if ($getstatus eq 'ok') {
+ foreach my $item (keys %newname) {
+ if ($newname{$item} ne $origname{$item}) {
+ my $attrib_regexp = '';
+ if (@{$attribs{$item}} > 1) {
+ $attrib_regexp = join('|',@{$attribs{$item}});
+ } else {
+ $attrib_regexp = $attribs{$item}[0];
+ }
+ if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) {
+ }
+ $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;
+ }
+ if (exists($codebase{$item})) {
+ $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs
+ }
+ }
+# Save edited file.
+ my $saveresult;
+ my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
+ my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);
+ } else {
+ &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);
+ }
+ }
+ }
+ }
+
+ unless ($showdoc || $upload_result eq 'phasetwo') {
+# -----------------------------------------------------------------------------
+ my %lt=&Apache::lonlocal::texthash(
+ 'uplm' => 'Upload a new main '.lc($type).' document',
+ 'upls' => 'Upload a new supplemental '.lc($type).' document',
+ 'impp' => 'Import a document',
+ 'pubd' => 'Published documents',
+ 'copm' => 'All documents out of a published map into this folder',
+ 'spec' => 'Special documents',
+ 'upld' => 'Upload Document',
+ 'srch' => 'Search',
+ 'impo' => 'Import',
+ 'book' => 'Import Bookmarks',
+ 'selm' => 'Select Map',
+ 'load' => 'Load Map',
+ 'reco' => 'Recover Deleted Resources',
+ 'newf' => 'New Folder',
+ 'newp' => 'New Composite Page',
+ 'extr' => 'External Resource',
+ 'syll' => 'Syllabus',
+ 'navc' => 'Navigate Contents',
+ 'sipa' => 'Simple Page',
+ 'sipr' => 'Simple Problem',
+ 'drbx' => 'Drop Box',
+ 'scuf' => 'Score Upload Form',
+ 'bull' => 'Bulletin Board',
+ 'mypi' => 'My Personal Info',
+ 'grpo' => 'Group Files',
+ 'abou' => 'About User',
+ 'imsf' => 'Import IMS package',
+ 'file' => 'File',
+ 'title' => 'Title',
+ 'comment' => 'Comment',
+ 'parse' => 'If HTML file, upload embedded images/multimedia files'
+ );
+# -----------------------------------------------------------------------------
if ($allowed) {
my $dumpbut=&dumpbutton();
+ my $exportbut=&exportbutton();
+ my %lt=&Apache::lonlocal::texthash(
+ 'vc' => 'Verify Content',
+ 'cv' => 'Check/Set Resource Versions',
+ 'ls' => 'List Symbs',
+ 'sl' => 'Show Log'
+ );
+
+ my $folderpath=$env{'form.folderpath'};
+ if (!$folderpath) {
+ if ($env{'form.folder'} eq '' ||
+ $env{'form.folder'} eq 'supplemental') {
+ $folderpath='default&'.
+ &escape(&mt('Main '.$type.' Documents'));
+ }
+ }
+ unless ($env{'form.pagepath'}) {
+ $containertag = ' ';
+ $uploadtag = ' ';
+ }
+
$r->print(<
-
+
+$containertag
-
-
+
+$uploadtag
ENDCOURSEVERIFY
$r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
- 'Editing the Table of Contents for your Course'));
+ &mt('Editing the Table of Contents for your '.$type)));
}
# --------------------------------------------------------- Standard documents
$r->print('');
if (($standard) && ($allowed) && (!$forcesupplement)) {
- $r->print('Main Course Documents'.
- ($allowed?' '.$help{'Main_Course_Documents'}:'').' ');
- my $folder=$ENV{'form.folder'};
- unless ($folder=~/^default/) { $folder='default'; }
+ $r->print('');
+# ''.&mt('Main Course Documents').
+# ($allowed?' '.$help{'Main_Course_Documents'}:'').' ');
+ my $folder=$env{'form.folder'};
+ if ($folder eq '' || $folder eq 'supplemental') {
+ $folder='default';
+ $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
+ }
my $postexec='';
if ($folder eq 'default') {
$r->print('');
} else {
- $postexec='self.close();';
+ #$postexec='self.close();';
}
$hadchanges=0;
- &editor($r,$coursenum,$coursedom,$folder,$allowed);
+ &editor($r,$coursenum,$coursedom,$folder,$allowed,$upload_output);
if ($hadchanges) {
- $r->print(
-''.
-''.
-'Changes will become active for your current session after , or the next time you log in.'.
-$help{'Caching'}.' ');
+ &mark_hash_old()
}
+ &changewarning($r,$postexec);
my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
'.sequence';
-
+ my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
+ '.page';
+ my $container='sequence';
+ if ($env{'form.pagepath'}) {
+ $container='page';
+ }
+ my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container;
$r->print(<
-Upload a new main course document
-Import a published document
-Special documents
+$lt{'uplm'}
+$lt{'impp'}
+$lt{'spec'}
-File:
-
+$lt{'file'}:
+
-Title:
+$lt{'title'}:
-
-
+$uploadtag
-
+
+
+$lt{'parse'}?
+
+
+
+
+
+
$help{'Uploading_From_Harddrive'}
-
-
-
+$lt{'pubd'}
+$uploadtag
+
+
-
+
$help{'Importing_LON-CAPA_Resource'}
+
+
-
+$lt{'copm'}
+
+value="$lt{'selm'}">
$help{'Load_Map'}
-
-
-
-
-
+
+
+
+
+ENDFORM
+ unless ($env{'form.pagepath'}) {
+ $r->print(<
+
+$uploadtag
+
+
+ $help{'Adding_External_Resource'}
+
+
+
+
+
+
+
+ENDFORM
+ }
+ $r->print(' ');
+ unless ($env{'form.pagepath'}) {
+ $r->print(<
+
+
$help{'Adding_Folders'}
+value="$lt{'newf'}" />$help{'Adding_Folders'}
-
-
-
-
+
+
+
- $help{'Adding_External_Resource'}
+ $help{'Adding_Pages'}
-
-
-
-
+
+$uploadtag
+
-
+
$help{'Syllabus'}
-
-
-
-
+
+$uploadtag
+
-
+
$help{'Navigate_Content'}
-
-
-
-
+
+$uploadtag
+
- $help{'Simple Page'}
-
-
-
-
+
+$uploadtag
+
- $help{'Simple Problem'}
-
-
-
-
+
+$uploadtag
+
+
+
+
+
+
+$uploadtag
+
-
$help{'Score_Upload_Form'}
-
-
-
-
+
+$uploadtag
+
-
$help{'Bulletin Board'}
-
-
-
-
+
+$uploadtag
+
-
+
$help{'My Personal Info'}
-
-
+
+$uploadtag
+
+
+
+
+
+
+$uploadtag
+
+
+
+$help{'Group Files'}
+
+
ENDFORM
+ }
+ if ($env{'form.pagepath'}) {
+ $r->print(<
+$uploadtag
+
+
+ $help{'Simple Problem'}
+
+
+
+$uploadtag
+
+
+
+$help{'Score_Upload_Form'}
+
+
+ENDBLOCK
+ }
+ $r->print(''."\n".
+'');
$r->print('');
}
# ----------------------------------------------------- Supplemental documents
if (!$forcestandard) {
- $r->print(
- 'Supplemental Course Documents'.
- ($allowed?' '.$help{'Supplemental'}:'').' ');
- my $folder=$ENV{'form.folder'};
- unless ($folder=~/supplemental/) { $folder='supplemental'; }
+ $r->print('');
+# ''.&mt('Supplemental Course Documents').
+# ($allowed?' '.$help{'Supplemental'}:'').' ');
+ my $folder=$env{'form.folder'};
+ unless ($folder=~/^supplemental/) {
+ $folder='supplemental';
+ }
+ if ($folder =~ /^supplemental$/ &&
+ $env{'form.folderpath'} =~ /^default\&/) {
+ $env{'form.folderpath'}='supplemental&'.
+ &escape(&mt('Supplemental '.$type.' Documents'));
+ }
&editor($r,$coursenum,$coursedom,$folder,$allowed);
if ($allowed) {
my $folderseq=
@@ -994,80 +2911,66 @@ ENDFORM
$r->print(<
-Upload a new supplemental course document
-Import a published document
-Special documents
+$lt{'upls'}
+$lt{'spec'}
- Comment:
+
+
+
+$lt{'parse'}?
+
+
+
+
+$lt{'comment'}:
-
-
+
+
-
+
$help{'Uploading_From_Harddrive'}
-
-
-
-
-
- $help{'Importing_LON-CAPA_Resource'}
-
-
-
-
-
-
-
-
-
-
+
+
$help{'Adding_Folders'}
+value="$lt{'newf'}" /> $help{'Adding_Folders'}
-
-
-
-
+
+
+
$help{'Adding_External_Resource'}
+value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
-
-
-
-
+
+
+
-
+
$help{'Syllabus'}
-
-
-
-
+
+
+
-
+
$help{'My Personal Info'}
@@ -1077,18 +2980,189 @@ ENDSUPFORM
}
}
if ($allowed) {
- $r->print(' ');
+ $r->print(' ');
}
$r->print('');
} else {
+ unless ($upload_result eq 'phasetwo') {
# -------------------------------------------------------- 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("".&mt('Uploaded Document').' - '.
+ &Apache::lonnet::gettitle($r->uri).' '.
+&mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."
".
+ &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'
');
+ }
}
}
- $r->print('');
+ $r->print(&Apache::loncommon::end_page());
return OK;
}
+
+sub editing_js {
+ my ($udom,$uname) = @_;
+ my $now = time();
+
+ return <