--- loncom/interface/londocs.pm 2006/07/20 18:37:14 1.241
+++ loncom/interface/londocs.pm 2007/06/29 21:08:07 1.280
@@ -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.280 2007/06/29 21:08:07 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,17 +33,16 @@ 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 lib '/home/httpd/lib/perl/';
-use LONCAPA;
+use LONCAPA qw(:DEFAULT :match);
my $iconpath;
@@ -58,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
@@ -67,15 +66,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;
@@ -100,7 +99,7 @@ sub authorhosts {
$ca=$env{'user.name'};
$cd=$env{'user.domain'};
} else {
- ($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/);
+ ($cd,$ca)=($realm=~/^\/($match_domain)\/($match_username)$/);
}
my $allowed=0;
my $myhome=&Apache::lonnet::homeserver($ca,$cd);
@@ -148,6 +147,7 @@ sub dumpcourse {
my $type = &Apache::loncommon::course_type();
$r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
'
');
+ $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
+ ''.&mt('Time').' '.&mt('User').' '.&mt('Folder').' '.&mt('Before').' '.
+ &mt('After').' '.
+ &Apache::loncommon::end_data_table_header_row());
+ my $shown=0;
+ foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {
+ if ($env{'form.displayfilter'} eq 'currentfolder') {
+ if ($docslog{$id}{'logentry'}{'currentfolder'} ne $folder) { next; }
+ }
+ my @changes=keys(%{$docslog{$id}{'logentry'}});
+ if ($env{'form.displayfilter'} eq 'containing') {
+ my $wholeentry=$docslog{$id}{'exe_uname'}.':'.$docslog{$id}{'exe_udom'}.':'.
+ &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},$docslog{$id}{'exe_udom'});
+ foreach my $key (@changes) {
+ $wholeentry.=':'.$docslog{$id}{'logentry'}{$key};
+ }
+ if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }
+ }
+ my $count = 0;
+ my $time =
+ &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});
+ my $plainname =
+ &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},
+ $docslog{$id}{'exe_udom'});
+ my $about_me_link =
+ &Apache::loncommon::aboutmewrapper($plainname,
+ $docslog{$id}{'exe_uname'},
+ $docslog{$id}{'exe_udom'});
+ my $send_msg_link='';
+ if ((($docslog{$id}{'exe_uname'} ne $env{'user.name'})
+ || ($docslog{$id}{'exe_udom'} ne $env{'user.domain'}))) {
+ $send_msg_link =' '.
+ &Apache::loncommon::messagewrapper(&mt('Send message'),
+ $docslog{$id}{'exe_uname'},
+ $docslog{$id}{'exe_udom'});
+ }
+ $r->print(&Apache::loncommon::start_data_table_row());
+ $r->print(''.$time.'
+ '.$about_me_link.
+ ''.$docslog{$id}{'exe_uname'}.
+ ':'.$docslog{$id}{'exe_udom'}.' '.
+ $send_msg_link.' '.
+ $docslog{$id}{'logentry'}{'folder'}.' ');
+# Before
+ for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
+ my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];
+ my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];
+ if ($oldname ne $newname) {
+ $r->print(&LONCAPA::map::qtescape($oldname));
+ }
+ }
+ $r->print('');
+ for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
+ if ($docslog{$id}{'logentry'}{'before_order_res_'.$idx}) {
+ $r->print(''.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'before_order_res_'.$idx}))[0]).' ');
+ }
+ }
+ $r->print(' ');
+# After
+ $r->print(' ');
+
+ for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
+ my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];
+ my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];
+ if ($oldname ne '' && $oldname ne $newname) {
+ $r->print(&LONCAPA::map::qtescape($newname));
+ }
+ }
+ $r->print('');
+ for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
+ if ($docslog{$id}{'logentry'}{'after_order_res_'.$idx}) {
+ $r->print(''.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'after_order_res_'.$idx}))[0]).' ');
+ }
+ }
+ $r->print(' ');
+ if ($docslog{$id}{'logentry'}{'parameter_res'}) {
+ $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':');
+ foreach my $parameter ('randompick','hiddenresource','encrypturl') {
+ if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
+ $r->print(''.
+ &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
+ $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
+ .' ');
+ }
+ }
+ $r->print(' ');
+ }
+# End
+ $r->print(' '.&Apache::loncommon::end_data_table_row());
+ $shown++;
+ if (!($env{'form.show'} eq &mt('all')
+ || $shown<=$env{'form.show'})) { last; }
}
- return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
- 'LC_docs_path');
+ $r->print(&Apache::loncommon::end_data_table());
}
sub editor {
@@ -991,19 +1197,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,$plain)=&breadcrumbs($folder);
+ $r->print($breadcrumbtrail);
if ($fatal) {
$r->print(''.$errtext.'
');
} else {
@@ -1012,68 +1219,85 @@ sub editor {
# ---------------- if they are for this folder and user allowed to make changes
if (($allowed) && ($env{'form.folder'} eq $folder)) {
# set parameters and change order
- if (defined($env{'form.setparms'})) {
+ &snapshotbefore();
+ if ($env{'form.changeparms'}) {
my $idx=$env{'form.setparms'};
# set parameters
- if ($env{'form.randpick_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
- } else {
- &Apache::lonratedt::delparameter($idx,'parameter_randompick');
+ if ($env{'form.changeparms'} eq 'randompick') {
+ if ($env{'form.randpick_'.$idx}) {
+ &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
+ &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
+ } else {
+ &LONCAPA::map::delparameter($idx,'parameter_randompick');
+ &remember_parms($idx,'randompick','del');
+ }
}
- if ($env{'form.hidprs_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
- } else {
- &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource');
+ if ($env{'form.changeparms'} eq 'hiddenresource') {
+ if ($env{'form.hidprs_'.$idx}) {
+ &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
+ &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
+ } else {
+ &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
+ &remember_parms($idx,'hiddenresource','del');
+ }
}
- if ($env{'form.encprs_'.$idx}) {
- &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
- } else {
- &Apache::lonratedt::delparameter($idx,'parameter_encrypturl');
+ if ($env{'form.changeparms'} eq 'encrypturl') {
+ if ($env{'form.encprs_'.$idx}) {
+ &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
+ &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
+ } else {
+ &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
+ &remember_parms($idx,'encrypturl','del');
+ }
}
+# store the changed version
+ ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
+ if ($fatal) {
+ $r->print(''.$errtext.'
');
+ return;
+ }
+ }
- if ($env{'form.newpos'}) {
+ if ($env{'form.newpos'}) {
# change order
-
- my $newpos=$env{'form.newpos'}-1;
- my $currentpos=$env{'form.currentpos'}-1;
- my $i;
- my @neworder=();
- if ($newpos>$currentpos) {
+ my $newpos=$env{'form.newpos'}-1;
+ my $currentpos=$env{'form.currentpos'}-1;
+ my $i;
+ my @neworder=();
+ if ($newpos>$currentpos) {
# moving stuff up
- for ($i=0;$i<$currentpos;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
- }
- for ($i=$currentpos;$i<$newpos;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i+1];
- }
- $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];
- for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
- }
- } else {
+ for ($i=0;$i<$currentpos;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i];
+ }
+ for ($i=$currentpos;$i<$newpos;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i+1];
+ }
+ $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[$newpos]=$Apache::lonratedt::order[$currentpos];
- for ($i=$newpos+1;$i<$currentpos+1;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i-1];
- }
- for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) {
- $neworder[$i]=$Apache::lonratedt::order[$i];
- }
+ for ($i=0;$i<$newpos;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i];
+ }
+ $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
+ for ($i=$newpos+1;$i<$currentpos+1;$i++) {
+ $neworder[$i]=$LONCAPA::map::order[$i-1];
+ }
+ 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
-
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
if ($fatal) {
$r->print(''.$errtext.'
');
return;
}
-
}
+
if ($env{'form.pastemarked'}) {
# paste resource to end of list
my $url=$env{'form.markedcopy_url'};
@@ -1085,23 +1309,21 @@ sub editor {
$url=~/^(.+)\.(\w+)$/;
my $newurl=$1.$newid.'.'.$2;
my $storefn=$newurl;
- $storefn=~s/^\/\w+\/\w+\/\w+\///;
- &Apache::loncreatecourse::writefile
+ $storefn=~s{^/\w+/$match_domain/$match_username/}{};
+ &Apache::lonclonecourse::writefile
($env{'request.course.id'},$storefn,
&Apache::lonnet::getfile($url));
$url=$newurl;
}
- $title=~s/\\<\;/g;
- $title=~s/\>/\>\;/g;
- $title=~s/\:/\:/g;
+ $title = &LONCAPA::map::qtunescape($title);
my $ext='false';
if ($url=~/^http\:\/\//) { $ext='true'; }
- $url=~s/\:/\:/g;
+ $url = &LONCAPA::map::qtunescape($url);
# 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,59 +1336,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]]);
- my $comment=
- &HTML::Entities::decode($env{'form.title'});
- $comment=~s/\\<\;/g;
- $comment=~s/\>/\>\;/g;
- $comment=~s/\:/\:/g;
+ $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
+ my $comment=$env{'form.title'};
+ $comment = &LONCAPA::map::qtunescape($comment);
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];
-# Has the :-escaping
- $renamed_url=~s/\&colon\;/\:/g;
+ my $renamed_url=&LONCAPA::map::qtescape($rrest[0]);
&Apache::lonnet::devalidate_title_cache($renamed_url);
}
# Store the changed version
@@ -1180,7 +1391,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(/\=/,$_);
@@ -1190,7 +1401,7 @@ sub editor {
}
}
# Store the changed version
- ($errtext,$fatal)=group_import($coursenum, $coursedom, $folder,
+ ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,
$container,'londocs',@imports);
if ($fatal) {
$r->print(''.$errtext.'
');
@@ -1202,10 +1413,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,
@@ -1218,19 +1428,31 @@ sub editor {
$r->print(''.&mt('No map selected.').'
');
}
}
+ &log_differences($plain);
}
# ---------------------------------------------------------------- End commands
# ---------------------------------------------------------------- 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[$_]);
- $name=&Apache::lonratsrv::qtescape($name);
- $url=&Apache::lonratsrv::qtescape($url);
+ foreach my $res (@LONCAPA::map::order) {
+ my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
+ $name=&LONCAPA::map::qtescape($name);
+ $url=&LONCAPA::map::qtescape($url);
unless ($name) { $name=(split(/\//,$url))[-1]; }
unless ($name) { $idx++; next; }
- $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
+ $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,
+ $coursenum));
$idx++;
$shown++;
}
@@ -1244,11 +1466,19 @@ sub editor {
ENDPASTE
- $r->print(
- ' '.&Apache::loncommon::filedescription(
- (split(/\./,$env{'form.markedcopy_url'}))[-1]).': '.
- $env{'form.markedcopy_title'});
+ $r->print(' ');
+
+ my $type;
+ if ($env{'form.markedcopy_url'} =~ m{^/adm/wrapper/ext}) {
+ $type = &mt('External Resource');
+ $r->print($type.': '. $env{'form.markedcopy_title'});
+ } else {
+ my $extension = (split(/\./,$env{'form.markedcopy_url'}))[-1];
+ my $type = &Apache::loncommon::filedescription($extension);
+ my $icon = ' ';
+ $r->print($icon.$type.': '. $env{'form.markedcopy_title'});
+ }
if ($container eq 'page') {
$r->print(<
@@ -1285,9 +1515,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,26 +1533,24 @@ 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,
$codebase);
my $ext='false';
if ($url=~/^http\:\/\//) { $ext='true'; }
- $url=~s/\:/\:/g;
+ $url = &LONCAPA::map::qtunescape($url);
my $comment=$env{'form.comment'};
- $comment=~s/\\<\;/g;
- $comment=~s/\>/\>\;/g;
- $comment=~s/\:/\:/g;
+ $comment = &LONCAPA::map::qtunescape($comment);
if ($folder=~/^supplemental/) {
$comment=time.'___&&&___'.$env{'user.name'}.'___&&&___'.
$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) {
@@ -1333,38 +1561,18 @@ sub process_file_upload {
my $total_embedded = keys(%{$allfiles});
if ($total_embedded > 0) {
my $num = 0;
- $$upload_output .= 'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.
- ';
+ $phase_status = 'phasetwo';
+
+ $$upload_output .=
+ 'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA. '.
+ &ask_for_embedded_content('/adm/coursedocs',
+ $state,$allfiles,$codebase);
} else {
$$upload_output .= 'No embedded items identified ';
}
@@ -1374,6 +1582,55 @@ sub process_file_upload {
return $phase_status;
}
+sub ask_for_embedded_content {
+ my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
+ my $upload_output = '
+ ';
+ return $upload_output;
+}
+
sub process_secondary_uploads {
my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;
my $folder=$env{'form.folder'};
@@ -1389,7 +1646,7 @@ sub process_secondary_uploads {
$destination .= $newidx;
my ($url,$filename);
$url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);
- ($filename) = ($url =~ m-^/uploaded/$coursedom/$coursenum/$destination/(.+)$-);
+ ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});
return $filename;
}
@@ -1397,14 +1654,12 @@ sub process_secondary_uploads {
sub entryline {
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
- $title=~s/\&colon\;/\:/g;
- $title=&HTML::Entities::encode(&HTML::Entities::decode(
- &unescape($title)),'"<>&\'');
+ $title=&HTML::Entities::encode($title,'"<>&\'');
my $renametitle=$title;
my $foldertitle=$title;
my $pagetitle=$title;
- my $orderidx=$Apache::lonratedt::order[$index];
- if ($title=~ /^(\d+)___&&&___(\w+)___&&&___(\w+)___&&&___(.*)$/ ) {
+ my $orderidx=$LONCAPA::map::order[$index];
+ if ($title=~ /^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/ ) {
$foldertitle=&Apache::lontexconvert::msgtexconverted($4);
$renametitle=$4;
$title=''.&Apache::lonlocal::locallocaltime($1).' '.
@@ -1416,17 +1671,17 @@ sub entryline {
my $line='';
# Edit commands
my $container;
- my $folderpath;
+ my ($container, $type, $esc_path, $path, $symb);
if ($env{'form.folderpath'}) {
+ $type = 'folder';
$container = 'sequence';
- $folderpath=&escape($env{'form.folderpath'});
+ $esc_path=&escape($path = $env{'form.folderpath'});
# $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');
}
- my ($pagepath,$pagesymb);
if ($env{'form.pagepath'}) {
- $container = 'page';
- $pagepath=&escape($env{'form.pagepath'});
- $pagesymb=&escape($env{'form.pagesymb'});
+ $type = $container = 'page';
+ $esc_path=&escape($path = $env{'form.pagepath'});
+ $symb=&escape($env{'form.pagesymb'});
}
my $cpinfo='';
if ($env{'form.markedcopy_url'}) {
@@ -1439,17 +1694,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 {
@@ -1466,6 +1721,7 @@ sub entryline {
'rn' => 'Rename',
'cp' => 'Copy');
my $nocopy=0;
+ my $nocut=0;
if ($url=~/\.(page|sequence)$/) {
foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {
my ($title,$url,$ext,$type)=split(/\:/,$_);
@@ -1475,71 +1731,58 @@ sub entryline {
}
}
}
+ if ($url=~/^\/res\/lib\/templates\//) {
+ $nocopy=1;
+ $nocut=1;
+ }
my $copylink=' ';
- if ($env{'form.pagepath'}) {
- unless ($nocopy) {
- $copylink=(<
-$lt{'cp'}
+ my $cutlink=' ';
+
+ if (!$nocopy) {
+ $copylink=(<
+$lt{'cp'}
ENDCOPY
- }
- $line.=(<
-
-
-
-
-
-
-
-
-
-
-
-
-
-$selectbox
-
-
-$lt{'rm'}
-
-$lt{'ct'}
-
-$lt{'rn'}
-$copylink
-END
- } else {
- unless ($nocopy) {
- $copylink=(<
-$lt{'cp'}
-ENDCOPY
- }
- $line.=(<
-
-
-
-
-
-
-
-
-
-
-
-
-$selectbox
-
-
-$lt{'rm'}
-
+ }
+ if (!$nocut) {
+ $cutlink=(<
$lt{'ct'}
-
-$lt{'rn'}
+ENDCUT
+ }
+ $line.=(<
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $selectbox
+
+
+ $lt{'rm'}
+$cutlink
+ $lt{'rn'}
$copylink
+
END
- }
+
}
# Figure out what kind of a resource this is
my ($extension)=($url=~/\.(\w+)$/);
@@ -1553,13 +1796,13 @@ END
if ($uploaded) {
if ($extension eq 'sequence') {
$icon=$iconpath.'/folder_closed.gif';
- $url=~/$coursenum\/([\/\w]+)\.sequence$/;
+ $url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/;
$url='/adm/coursedocs?';
$folderarg=$1;
$isfolder=1;
} elsif ($extension eq 'page') {
$icon=$iconpath.'/page.gif';
- $url=~/$coursenum\/([\/\w]+)\.page$/;
+ $url=~/\Q$coursenum\E\/([\/\w]+)\.page$/;
$pagearg=$1;
$url='/adm/coursedocs?';
$ispage=1;
@@ -1608,14 +1851,21 @@ 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').' ';
+''.&mt('Save').' ';
}
if ($ispage) {
@@ -1645,14 +1895,14 @@ 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'}
+ $lt{'hd'}
- $lt{'ec'}
+ $lt{'ec'}
$parameterset
ENDPARMS
}
@@ -1766,6 +2016,7 @@ 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()) {
@@ -1785,6 +2036,7 @@ sub verifycontent {
my $loaderror=&Apache::lonnet::overloaderror($r);
if ($loaderror) { return $loaderror; }
$r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));
$hashtied=0;
undef %alreadyseen;
%alreadyseen=();
@@ -1820,6 +2072,7 @@ sub checkversions {
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='';
@@ -1871,9 +2124,9 @@ sub checkversions {
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').' ');
+ $r->print(''.&mt('Your Version Settings have been Saved').' ');
} else {
- $r->print(''.&mt('An Error Occured while Attempting to Store your Version Settings').' ');
+ $r->print(''.&mt('An Error Occured while Attempting to Save your Version Settings').' ');
}
&mark_hash_old();
}
@@ -2111,6 +2364,22 @@ sub changewarning {
$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;
@@ -2139,20 +2408,28 @@ sub handler {
'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');
# 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 ($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 ($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?
@@ -2207,8 +2484,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
@@ -2227,7 +2503,8 @@ sub handler {
my %codebase = ();
my ($upload_result,$upload_output);
if ($allowed) {
- if (($env{'form.uploaddoc.filename'}) && ($env{'form.cmd'}=~/^upload_(\w+)/)) {
+ 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,
@@ -2332,6 +2609,7 @@ sub handler {
'scuf' => 'Score Upload Form',
'bull' => 'Bulletin Board',
'mypi' => 'My Personal Info',
+ 'grpo' => 'Group Files',
'abou' => 'About User',
'imsf' => 'Import IMS package',
'file' => 'File',
@@ -2347,6 +2625,7 @@ sub handler {
'vc' => 'Verify Content',
'cv' => 'Check/Set Resource Versions',
'ls' => 'List Symbs',
+ 'sl' => 'Show Log'
);
my $folderpath=$env{'form.folderpath'};
@@ -2370,7 +2649,7 @@ sub handler {
$containertag
ENDCOURSEVERIFY
@@ -2482,7 +2764,7 @@ ENDFORM
$uploadtag
-
+
@@ -2671,7 +2962,7 @@ $lt{'comment'}:
-
+
$help{'Adding_Fol
-
+
$help{'Adding_Ext
-
+
$help{'Syllabus'}
@@ -2698,8 +2989,8 @@ $help{'Syllabus'}
-
+
$help{'My Personal Info'}