';
+ &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
}
@@ -280,6 +276,15 @@ sub exportcourse {
$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
my $numdisc = keys(%discussiontime);
my $navmap = Apache::lonnavmaps::navmap->new();
+ if (!defined($navmap)) {
+ $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package').
+ '
IMS Export Failed
'.
+ '
'.
+ &mt('Unable to retrieve information about course contents').
+ '
'.&mt('Return to Course Editor').'');
+ &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+ return;
+ }
my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
my $curRes;
my $outcome;
@@ -471,8 +476,7 @@ function containerCheck(item) {
$r->print($display.''.
'
'.
'
'.
- &Apache::loncommon::end_page());
+ &mt('Export '.$type.' DOCS').'" />');
}
}
@@ -755,7 +759,7 @@ sub replicate_content {
if ($caller eq 'templateupload') {
$url = $symb;
$url =~ s#//#/#g;
- } else {
+ } else {
($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
}
my $content;
@@ -795,9 +799,9 @@ sub replicate_content {
$$message = 'Could not render '.$url.' server message - '.$rtncode." \n";
}
} elsif ($caller eq 'noedit') {
-# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
+# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
$repstatus = 'ok';
- $content = 'Not the owner of this resource';
+ $content = 'Not the owner of this resource';
}
if ($repstatus eq 'ok') {
print $copiedfile $content;
@@ -848,8 +852,8 @@ sub extract_media {
}
}
if ($caller eq 'resource') {
- my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res';
- my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url);
+ my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res';
+ my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url);
$embed_content = &Apache::lonnet::getfile($embed_path);
unless ($embed_content eq -1) {
$repstatus = 'ok';
@@ -917,7 +921,7 @@ sub group_import {
while (@files) {
my ($name, $url, $residx) = @{ shift(@files) };
- if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$})
+ if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$})
&& ($caller eq 'londocs')
&& (!&Apache::lonnet::stat_file($url))) {
@@ -940,7 +944,7 @@ sub group_import {
}
}
if ($url) {
- if (!$residx
+ if (!$residx
|| defined($LONCAPA::map::zombies[$residx])) {
$residx = &LONCAPA::map::getresidx($url,$residx);
push(@LONCAPA::map::order, $residx);
@@ -949,7 +953,7 @@ sub group_import {
if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }
$url = &LONCAPA::map::qtunescape($url);
$name = &LONCAPA::map::qtunescape($name);
- $LONCAPA::map::resources[$residx] =
+ $LONCAPA::map::resources[$residx] =
join(':', ($name, $url, $ext, 'normal', 'res'));
}
}
@@ -980,9 +984,9 @@ sub breadcrumbs {
my $url='/adm/coursedocs?folderpath='.
&escape($folderpath);
my $name=&unescape($foldername);
-# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername
+# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername
$name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;
- if ($1 ne '') {
+ if ($1 ne '') {
$randompick=$1;
} else {
$randompick=-1;
@@ -1121,7 +1125,7 @@ sub docs_change_log {
foreach my $key (@changes) {
$wholeentry.=':'.$docslog{$id}{'logentry'}{$key};
}
- if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }
+ if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }
}
my $count = 0;
my $time =
@@ -1219,7 +1223,7 @@ sub update_paste_buffer {
&Apache::lonnet::appenv({'docs.markedcopy_supplemental' => $title});
($title) = &parse_supplemental_title($title);
} elsif ($env{'docs.markedcopy_supplemental'}) {
- &Apache::lonnet::delenv('docs\\.markedcopy_supplemental');
+ &Apache::lonnet::delenv('docs.markedcopy_supplemental');
}
$url=~s{http(:|:)//https(:|:)//}{https$2//};
@@ -1280,9 +1284,33 @@ sub do_paste_from_buffer {
# Maps need to be copied first
if (($url=~/\.(page|sequence)$/) && ($url=~/^\/uploaded\//)) {
$title=&mt('Copy of').' '.$title;
- my $newid=$$.time;
- $url=~/^(.+)\.(\w+)$/;
- my $newurl=$1.$newid.'.'.$2;
+ my $newid=$$.int(rand(100)).time;
+ my ($oldid,$ext) = ($url=~/^(.+)\.(\w+)$/);
+ if ($oldid =~ m{^(/uploaded/\Q$coursedom\E/\Q$coursenum\E/)(\D+)(\d+)$}) {
+ my $path = $1;
+ my $prefix = $2;
+ my $ancestor = $3;
+ if (length($ancestor) > 10) {
+ $ancestor = substr($ancestor,-10,10);
+ }
+ $oldid = $path.$prefix.$ancestor;
+ }
+ my $counter = 0;
+ my $newurl=$oldid.$newid.'.'.$ext;
+ my $is_unique = &uniqueness_check($newurl);
+ while (!$is_unique && $counter < 100) {
+ $counter ++;
+ $newid ++;
+ $newurl = $oldid.$newid;
+ $is_unique = &uniqueness_check($newurl);
+ }
+ if (!$is_unique) {
+ if ($url=~/\.page$/) {
+ return &mt('Paste failed: an error occurred creating a unique URL for the composite page');
+ } else {
+ return &mt('Paste failed: an error occurred creating a unique URL for the folder');
+ }
+ }
my $storefn=$newurl;
$storefn=~s{^/\w+/$match_domain/$match_username/}{};
my $paste_map_result =
@@ -1299,7 +1327,7 @@ sub do_paste_from_buffer {
}
# published maps can only exists once, so remove it from paste buffer when done
if (($url=~/\.(page|sequence)$/) && ($url=~m {^/res/})) {
- &Apache::lonnet::delenv('docs\\.markedcopy');
+ &Apache::lonnet::delenv('docs.markedcopy');
}
if ($url=~ m{/smppg$}) {
my $db_name = &Apache::lonsimplepage::get_db_name($url);
@@ -1310,7 +1338,7 @@ sub do_paste_from_buffer {
$db_name =~ s{_\d*$ }{_$now}x;
my $result=&Apache::lonnet::put($db_name,\%contents,
$coursedom,$coursenum);
- $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x;
+ $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x;
$title=&mt('Copy of').' '.$title;
}
}
@@ -1324,7 +1352,7 @@ sub do_paste_from_buffer {
if ($folder =~ /^supplemental/) {
$title = $env{'docs.markedcopy_supplemental'};
} else {
- (undef,undef,$title) =
+ (undef,undef,$title) =
&parse_supplemental_title($env{'docs.markedcopy_supplemental'});
}
} else {
@@ -1340,6 +1368,20 @@ sub do_paste_from_buffer {
# Store the result
}
+sub uniqueness_check {
+ my ($newurl) = @_;
+ my $unique = 1;
+ foreach my $res (@LONCAPA::map::order) {
+ my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
+ $url=&LONCAPA::map::qtescape($url);
+ if ($newurl eq $url) {
+ $unique = 0;
+ last;
+ }
+ }
+ return $unique;
+}
+
my %parameter_type = ( 'randompick' => 'int_pos',
'hiddenresource' => 'string_yesno',
'encrypturl' => 'string_yesno',
@@ -1388,7 +1430,7 @@ sub handle_edit_cmd {
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
splice(@LONCAPA::map::order, $idx, 1);
- } elsif ($cmd eq 'up'
+ } elsif ($cmd eq 'up'
&& ($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
@LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1];
@@ -1455,7 +1497,7 @@ sub editor {
}
if ($env{'form.pastemarked'}) {
- my $paste_res =
+ my $paste_res =
&do_paste_from_buffer($coursenum,$coursedom,$folder);
if ($paste_res eq 'ok') {
($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container);
@@ -1618,7 +1660,7 @@ sub process_file_upload {
';
$phase_status = 'phasetwo';
- $$upload_output .=
+ $$upload_output .=
'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA. '.
&Apache::loncommon::ask_for_embedded_content(
'/adm/coursedocs',$state,$allfiles,$codebase);
@@ -1721,12 +1763,12 @@ sub entryline {
my $incindex=$index+1;
my $selectbox='';
if (($folder!~/^supplemental/) &&
- ($#LONCAPA::map::order>0) &&
+ ($#LONCAPA::map::order>0) &&
((split(/\:/,
- $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1]
- ne '') &&
+ $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1]
+ ne '') &&
((split(/\:/,
- $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1]
+ $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1]
ne '')) {
$selectbox=
''.
@@ -1763,8 +1805,8 @@ sub entryline {
}
}
}
- if ($url=~/^\/res\/lib\/templates\//) {
- $nocopy=1;
+ if ($url=~/^\/res\/lib\/templates\//) {
+ $nocopy=1;
$nocut=1;
}
my $copylink=' ';
@@ -1857,6 +1899,7 @@ END
}
my $orig_url = $url;
+ $orig_url=~s{http(:|:)//https(:|:)//}{https$2//};
my $external = ($url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/});
if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
my $symb=&Apache::lonnet::symbclean(
@@ -1878,7 +1921,7 @@ END
} elsif ($url!~/\.(sequence|page)$/) {
$url='/adm/coursedocs/showdoc'.$url;
}
- } elsif ($url=~m|^/ext/|) {
+ } elsif ($url=~m|^/ext/|) {
$url='/adm/wrapper'.$url;
$external = 1;
}
@@ -1899,7 +1942,7 @@ END
my $foldername=&escape($foldertitle);
my $folderpath=$env{'form.folderpath'};
if ($folderpath) { $folderpath.='&' };
-# Append randompick number, hidden, and encrypted with ":" to 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]
@@ -1919,7 +1962,7 @@ END
my $ro_set=
((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':'');
$rand_order_text ='
-';
+';
}
if ($ispage) {
my $pagename=&escape($pagetitle);
@@ -2098,19 +2141,27 @@ List Symbs
sub list_symbs {
my ($r) = @_;
+ my $type = &Apache::loncommon::course_type();
$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");
+ if (!defined($navmap)) {
+ $r->print('
'.&mt('Retrieval of List Failed').'
'.
+ '
'.
+ &mt('Unable to retrieve information about course contents').
+ '
');
+ &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+ } else {
+ $r->print("
');
my $cols_output = 1;
for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
my $url=$root.'.'.$prevvers.'.'.$extension;
@@ -2433,7 +2484,7 @@ sub changewarning {
$message='Changes will become active for your current session after [_1], or the next time you log in.';
}
$r->print("\n\n".
-''."\n".
+''."\n".
'
+FUFORM
+
+ my $simpleeditdefaultform=(<
+ $lt{'pubd'}
+ $uploadtag
+
+
+
+
+ $help{'Importing_LON-CAPA_Resource'}
+
+
+
+
+