--- loncom/interface/londocs.pm 2006/07/20 18:37:14 1.241
+++ loncom/interface/londocs.pm 2006/11/02 21:06:06 1.245
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.241 2006/07/20 18:37:14 www Exp $
+# $Id: londocs.pm,v 1.245 2006/11/02 21:06:06 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,16 +33,16 @@ use Apache::Constants qw(:common :http);
use Apache::imsexport;
use Apache::lonnet;
use Apache::loncommon;
-use Apache::lonratedt;
+use LONCAPA::map();
+use Apache::lonratedt();
use Apache::lonratsrv;
use Apache::lonxml;
-use Apache::loncreatecourse;
+use Apache::lonclonecourse;
use Apache::lonnavmaps;
use HTML::Entities;
use GDBM_File;
use Apache::lonlocal;
use Cwd;
-use lib '/home/httpd/lib/perl/';
use LONCAPA;
my $iconpath;
@@ -58,7 +58,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
@@ -67,15 +67,15 @@ 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)=
- &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
- $map,1);
+ &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
+ $map,1);
if ($errtext) { return ($errtext,2); }
$hadchanges=1;
@@ -186,13 +186,13 @@ sub dumpcourse {
$r->print(''.$_.' => '.$newfilename.' : ');
if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
- print $fh &Apache::loncreatecourse::rewritefile(
- &Apache::loncreatecourse::readfile($env{'request.course.id'},$_),
+ print $fh &Apache::lonclonecourse::rewritefile(
+ &Apache::lonclonecourse::readfile($env{'request.course.id'},$_),
(%replacehash,$crs => '')
);
} else {
print $fh
- &Apache::loncreatecourse::readfile($env{'request.course.id'},$_);
+ &Apache::lonclonecourse::readfile($env{'request.course.id'},$_);
}
$fh->close();
} else {
@@ -230,7 +230,7 @@ sub dumpcourse {
$r->print('
'.&mt('Folder in Construction Space').' ');
&tiehash();
$r->print(''.&mt('Filenames in Construction Space').' '.&mt('Internal Filename').' '.&mt('Title').' '.&mt('Save as ...').' ');
- foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) {
+ foreach (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) {
$r->print(''.$_.' ');
my ($ext)=($_=~/\.(\w+)$/);
my $title=$hash{'title_'.$hash{
@@ -931,13 +931,13 @@ sub group_import {
}
}
if ($url) {
- my $idx = &Apache::lonratedt::getresidx($url);
- $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;
+ my $idx = &LONCAPA::map::getresidx($url);
+ $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
my $ext = 'false';
if ($url=~/^http:\/\//) { $ext = 'true'; }
$url =~ s/:/\:/g;
$name =~ s/:/\:/g;
- $Apache::lonratedt::resources[$idx] =
+ $LONCAPA::map::resources[$idx] =
join ':', ($name, $url, $ext, 'normal', 'res');
}
}
@@ -961,6 +961,9 @@ sub breadcrumbs {
'&markedcopy_title='.
&escape($env{'form.markedcopy_title'});
}
+ my $randompick=-1;
+ my $isencrypted=0;
+ my $ishidden=0;
while (@folders) {
my $folder=shift(@folders);
my $foldername=shift(@folders);
@@ -968,17 +971,25 @@ sub breadcrumbs {
$folderpath.=$folder.'&'.$foldername;
my $url='/adm/coursedocs?folderpath='.
&escape($folderpath);
+ my $name=&unescape($foldername);
+# randompick number, hidden, encrypted is appended with ":"s to the foldername
+ $name=~s/\:(\d*)\:(\w*)\:(\w*)$//;
+ if ($1 ne '') {
+ $randompick=$1;
+ } else {
+ $randompick=-1;
+ }
+ if ($2) { $ishidden=1; }
+ if ($3) { $isencrypted=1; }
&Apache::lonhtmlcommon::add_breadcrumb(
{'href'=>$url.$cpinfo,
- 'title'=>&unescape($foldername),
+ 'title'=>$name,
'text'=>''.
- &unescape($foldername).' '
+ $name.''
});
-
-
}
- return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
- 'LC_docs_path');
+ return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
+ 'LC_docs_path'),$randompick,$ishidden,$isencrypted);
}
sub editor {
@@ -991,19 +1002,20 @@ sub editor {
}
($errtext,$fatal)=
&mapread($coursenum,$coursedom,$folder.'.'.$container);
- if ($#Apache::lonratedt::order<1) {
- my $idx=&Apache::lonratedt::getresidx();
+ if ($#LONCAPA::map::order<1) {
+ my $idx=&LONCAPA::map::getresidx();
if ($idx<=0) { $idx=1; }
- $Apache::lonratedt::order[0]=$idx;
- $Apache::lonratedt::resources[$idx]='';
+ $LONCAPA::map::order[0]=$idx;
+ $LONCAPA::map::resources[$idx]='';
}
if (defined($env{'form.markcopy'})) {
# Mark for copying
- my ($title,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$env{'form.markcopy'}]]);
+ my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);
$env{'form.markedcopy_title'}=$title;
$env{'form.markedcopy_url'}=$url;
}
- $r->print(&breadcrumbs($folder));
+ my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted)=&breadcrumbs($folder);
+ $r->print($breadcrumbtrail);
if ($fatal) {
$r->print(''.$errtext.'
');
} else {
@@ -1016,19 +1028,19 @@ sub editor {
my $idx=$env{'form.setparms'};
# set parameters
if ($env{'form.randpick_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
+ &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
} else {
- &Apache::lonratedt::delparameter($idx,'parameter_randompick');
+ &LONCAPA::map::delparameter($idx,'parameter_randompick');
}
if ($env{'form.hidprs_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
+ &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
} else {
- &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource');
+ &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
}
if ($env{'form.encprs_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
+ &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
} else {
- &Apache::lonratedt::delparameter($idx,'parameter_encrypturl');
+ &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
}
if ($env{'form.newpos'}) {
@@ -1041,29 +1053,29 @@ sub editor {
if ($newpos>$currentpos) {
# moving stuff up
for ($i=0;$i<$currentpos;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
+ $neworder[$i]=$LONCAPA::map::order[$i];
}
for ($i=$currentpos;$i<$newpos;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i+1];
+ $neworder[$i]=$LONCAPA::map::order[$i+1];
}
- $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];
- for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
+ $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
+ for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i];
}
} else {
# moving stuff down
for ($i=0;$i<$newpos;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
+ $neworder[$i]=$LONCAPA::map::order[$i];
}
- $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];
+ $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
for ($i=$newpos+1;$i<$currentpos+1;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i-1];
+ $neworder[$i]=$LONCAPA::map::order[$i-1];
}
- for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
+ for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i];
}
}
- @Apache::lonratedt::order=@neworder;
+ @LONCAPA::map::order=@neworder;
}
# store the changed version
@@ -1086,7 +1098,7 @@ sub editor {
my $newurl=$1.$newid.'.'.$2;
my $storefn=$newurl;
$storefn=~s/^\/\w+\/\w+\/\w+\///;
- &Apache::loncreatecourse::writefile
+ &Apache::lonclonecourse::writefile
($env{'request.course.id'},$storefn,
&Apache::lonnet::getfile($url));
$url=$newurl;
@@ -1098,10 +1110,10 @@ sub editor {
if ($url=~/^http\:\/\//) { $ext='true'; }
$url=~s/\:/\:/g;
# Now insert the URL at the bottom
- my $newidx=&Apache::lonratedt::getresidx($url);
- $Apache::lonratedt::resources[$newidx]=
+ my $newidx=&LONCAPA::map::getresidx($url);
+ $LONCAPA::map::resources[$newidx]=
$title.':'.$url.':'.$ext.':normal:res';
- $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx;
+ $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
# Store the result
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
if ($fatal) {
@@ -1114,54 +1126,48 @@ sub editor {
if ($env{'form.cmd'}) {
my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});
if ($cmd eq 'del') {
- my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
+ my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
&Apache::lonnet::removeuploadedurl($url);
} else {
- &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
+ &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
}
- for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {
- $Apache::lonratedt::order[$i]=
- $Apache::lonratedt::order[$i+1];
+ for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
+ $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
}
- $#Apache::lonratedt::order--;
+ $#LONCAPA::map::order--;
} elsif ($cmd eq 'cut') {
- my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
- &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
- for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {
- $Apache::lonratedt::order[$i]=
- $Apache::lonratedt::order[$i+1];
+ my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
+ &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
+ for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
+ $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
}
- $#Apache::lonratedt::order--;
+ $#LONCAPA::map::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;
+ if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
+ my $i=$LONCAPA::map::order[$idx-1];
+ $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];
+ $LONCAPA::map::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;
+ if (defined($LONCAPA::map::order[$idx+1])) {
+ my $i=$LONCAPA::map::order[$idx+1];
+ $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];
+ $LONCAPA::map::order[$idx] = $i;
}
} elsif ($cmd eq 'rename') {
- my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]];
+ my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
my ($rtitle,@rrest)=split(/\:/,
- $Apache::lonratedt::resources[
- $Apache::lonratedt::order[$idx]]);
+ $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
my $comment=
&HTML::Entities::decode($env{'form.title'});
$comment=~s/\\<\;/g;
$comment=~s/\>/\>\;/g;
$comment=~s/\:/\:/g;
if ($comment=~/\S/) {
- $Apache::lonratedt::resources[
- $Apache::lonratedt::order[$idx]]=
- $comment.':'.join(':',@rrest);
+ $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
+ $comment.':'.join(':',@rrest);
}
# Devalidate title cache
my $renamed_url=$rrest[0];
@@ -1180,7 +1186,7 @@ sub editor {
# Group import/search
if ($env{'form.importdetail'}) {
my @imports;
- &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});
+# &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});
foreach (split(/\&/,$env{'form.importdetail'})) {
if (defined($_)) {
my ($name,$url)=split(/\=/,$_);
@@ -1202,10 +1208,9 @@ sub editor {
if ($env{'form.importmap'}=~/\w/) {
foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
my ($title,$url,$ext,$type)=split(/\:/,$_);
- my $idx=&Apache::lonratedt::getresidx($url);
- $Apache::lonratedt::resources[$idx]=$_;
- $Apache::lonratedt::order
- [$#Apache::lonratedt::order+1]=$idx;
+ my $idx=&LONCAPA::map::getresidx($url);
+ $LONCAPA::map::resources[$idx]=$_;
+ $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
}
# Store the changed version
($errtext,$fatal)=&storemap($coursenum,$coursedom,
@@ -1223,9 +1228,19 @@ sub editor {
# ---------------------------------------------------------------- Print screen
my $idx=0;
my $shown=0;
+ if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
+ $r->print(''.&mt('Parameters').':
'.
+ ($randompick>=0?''.&mt('randomly pick [_1] resources',$randompick).' ':'').
+ ($ishidden?''.&mt('contents hidden').' ':'').
+ ($isencrypted?''.&mt('URLs hidden').' ':'').
+ ' ');
+ }
+ if ($randompick>=0) {
+ $r->print(''.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'
');
+ }
$r->print('');
- foreach (@Apache::lonratedt::order) {
- my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
+ foreach (@LONCAPA::map::order) {
+ my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);
$name=&Apache::lonratsrv::qtescape($name);
$url=&Apache::lonratsrv::qtescape($url);
unless ($name) { $name=(split(/\//,$url))[-1]; }
@@ -1285,9 +1300,9 @@ sub process_file_upload {
}
($errtext,$fatal)=
&mapread($coursenum,$coursedom,$folder.'.'.$container);
- if ($#Apache::lonratedt::order<1) {
- $Apache::lonratedt::order[0]=1;
- $Apache::lonratedt::resources[1]='';
+ if ($#LONCAPA::map::order<1) {
+ $LONCAPA::map::order[0]=1;
+ $LONCAPA::map::resources[1]='';
}
if ($fatal) {
return 'failed';
@@ -1303,7 +1318,7 @@ sub process_file_upload {
}
# this is for a course, not a user, so set coursedoc flag
# probably the only place in the system where this should be "1"
- my $newidx=&Apache::lonratedt::getresidx();
+ my $newidx=&LONCAPA::map::getresidx();
$destination .= $newidx;
my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
$parseaction,$allfiles,
@@ -1320,9 +1335,9 @@ sub process_file_upload {
$env{'user.domain'}.'___&&&___'.$comment;
}
- $Apache::lonratedt::resources[$newidx]=
- $comment.':'.$url.':'.$ext.':normal:res';
- $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx;
+ $LONCAPA::map::resources[$newidx]=
+ $comment.':'.$url.':'.$ext.':normal:res';
+ $LONCAPA::map::order[$#LONCAPA::map::order+1]= $newidx;
($errtext,$fatal)=&storemap($coursenum,$coursedom,
$folder.'.'.$container);
if ($fatal) {
@@ -1403,7 +1418,7 @@ sub entryline {
my $renametitle=$title;
my $foldertitle=$title;
my $pagetitle=$title;
- my $orderidx=$Apache::lonratedt::order[$index];
+ my $orderidx=$LONCAPA::map::order[$index];
if ($title=~ /^(\d+)___&&&___(\w+)___&&&___(\w+)___&&&___(.*)$/ ) {
$foldertitle=&Apache::lontexconvert::msgtexconverted($4);
$renametitle=$4;
@@ -1439,17 +1454,17 @@ sub entryline {
my $incindex=$index+1;
my $selectbox='';
if (($folder!~/^supplemental/) &&
- ($#Apache::lonratedt::order>0) &&
+ ($#LONCAPA::map::order>0) &&
((split(/\:/,
- $Apache::lonratedt::resources[$Apache::lonratedt::order[0]]))[1]
+ $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1]
ne '') &&
((split(/\:/,
- $Apache::lonratedt::resources[$Apache::lonratedt::order[1]]))[1]
+ $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1]
ne '')) {
$selectbox=
' '.
'';
- for (my $i=1;$i<=$#Apache::lonratedt::order+1;$i++) {
+ for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
if ($i==$incindex) {
$selectbox.='('.$i.') ';
} else {
@@ -1608,11 +1623,18 @@ END
my $foldername=&escape($foldertitle);
my $folderpath=$env{'form.folderpath'};
if ($folderpath) { $folderpath.='&' };
- $folderpath.=$folderarg.'&'.$foldername;
+# 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').' ';
@@ -1645,9 +1667,9 @@ END
'hd' => 'Hidden',
'ec' => 'URL hidden');
my $enctext=
- ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
+ ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
my $hidtext=
- ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
+ ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
$line.=(<
$lt{'hd'}
@@ -2207,8 +2229,7 @@ sub handler {
# get personal data
my $uname=$env{'user.name'};
my $udom=$env{'user.domain'};
- my $plainname=&escape(
- &Apache::loncommon::plainname($uname,$udom));
+ my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));
# graphics settings