--- loncom/interface/londocs.pm 2012/12/13 02:45:27 1.484.2.15
+++ loncom/interface/londocs.pm 2012/06/30 23:11:11 1.488
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.484.2.15 2012/12/13 02:45:27 raeburn Exp $
+# $Id: londocs.pm,v 1.488 2012/06/30 23:11:11 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -69,14 +69,10 @@ sub mapread {
}
sub storemap {
- my ($coursenum,$coursedom,$map,$contentchg)=@_;
- my $report;
- if (($contentchg) && ($map =~ /^default/)) {
- $report = 1;
- }
+ my ($coursenum,$coursedom,$map)=@_;
my ($outtext,$errtext)=
&LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
- $map,1,$report);
+ $map,1);
if ($errtext) { return ($errtext,2); }
$hadchanges=1;
@@ -309,7 +305,7 @@ sub group_import {
join(':', ($name, $url, $ext, 'normal', 'res'));
}
}
- return &storemap($coursenum, $coursedom, $folder.'.'.$container,1);
+ return &storemap($coursenum, $coursedom, $folder.'.'.$container);
}
sub breadcrumbs {
@@ -322,6 +318,7 @@ sub breadcrumbs {
@folders=split('&',$env{'form.folderpath'});
}
my $folderpath;
+ my $cpinfo='';
my $plain='';
my $randompick=-1;
my $isencrypted=0;
@@ -354,7 +351,7 @@ sub breadcrumbs {
$name = &mt('Supplemental '.$crstype.' Content');
}
&Apache::lonhtmlcommon::add_breadcrumb(
- {'href'=>$url,
+ {'href'=>$url.$cpinfo,
'title'=>$name,
'text'=>$name,
'no_mt'=>1,
@@ -368,7 +365,7 @@ sub breadcrumbs {
}
sub log_docs {
- return &Apache::lonnet::write_log('course','docslog',@_);
+ return &Apache::lonnet::instructor_log('docslog',@_);
}
{
@@ -441,7 +438,7 @@ sub docs_change_log {
''."\n";
$r->print(&Apache::loncommon::start_page('Content Change Log',$js));
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Content Change Log'));
- $r->print(&startContentScreen(($supplementalflag?'suppdocs':'docs')));
+ $r->print(&startContentScreen('docs'));
my %orderhash;
my $container='sequence';
my $pathitem;
@@ -460,9 +457,6 @@ sub docs_change_log {
my $jumpto = $readfile;
$jumpto =~ s{^/}{};
my $tid = 1;
- if ($supplementalflag) {
- $tid = 2;
- }
my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
$r->print($breadcrumbtrail.
&generate_edit_table($tid,\%orderhash,undef,$iconpath,$jumpto,
@@ -537,7 +531,7 @@ sub docs_change_log {
':'.$docslog{$id}{'exe_udom'}.''.
$send_msg_link.'
'.
$docslog{$id}{'logentry'}{'folder'}.' ');
- my $is_supp = 0;
+ my $is_supp = 0;
if ($docslog{$id}{'logentry'}{'currentfolder'} =~ /^supplemental/) {
$is_supp = 1;
}
@@ -560,7 +554,7 @@ sub docs_change_log {
if ($is_supp) {
$shown = &Apache::loncommon::parse_supplemental_title($shown);
}
- $r->print(''.$shown.' ');
+ $r->print(''.$shown.' ');
}
}
$r->print('');
@@ -615,7 +609,7 @@ sub docs_change_log {
}
sub update_paste_buffer {
- my ($coursenum,$coursedom,$folder) = @_;
+ my ($coursenum,$coursedom) = @_;
return if (!defined($env{'form.markcopy'}));
return if (!defined($env{'form.copyfolder'}));
@@ -636,121 +630,47 @@ sub update_paste_buffer {
}
$url=~s{http(:|:)//https(:|:)//}{https$2//};
- (my $cmd,undef)=split('_',$env{'form.cmd'});
-
- my %addtoenv = (
- 'docs.markedcopy_title' => $title,
- 'docs.markedcopy_url' => $url,
- 'docs.markedcopy_cmd' => $cmd,
- );
- &Apache::lonnet::delenv('docs.markedcopy_nested');
- &Apache::lonnet::delenv('docs.markedcopy_nestednames');
- if ($url =~ m{^/uploaded/$match_domain/$match_courseid/(default|supplemental)_?(\d*)\.(page|sequence)$}) {
- my $prefix = $1;
- my $subdir =$2;
- if ($subdir eq '') {
- $subdir = $prefix;
- }
- my (%addedmaps,%removefrommap,%removeparam,%hierarchy,%titles,%allmaps);
- &contained_map_check($url,$folder,\%removefrommap,\%removeparam,\%addedmaps,
- \%hierarchy,\%titles,\%allmaps);
- if (ref($hierarchy{$url}) eq 'HASH') {
- my ($nested,$nestednames);
- &recurse_uploaded_maps($url,$subdir,\%hierarchy,\%titles,\$nested,\$nestednames);
- $nested =~ s/\&$//;
- $nestednames =~ s/\Q___&&&___\E$//;
- if ($nested ne '') {
- $addtoenv{'docs.markedcopy_nested'} = $nested;
- }
- if ($nestednames ne '') {
- $addtoenv{'docs.markedcopy_nestednames'} = $nestednames;
- }
- }
- }
- &Apache::lonnet::appenv(\%addtoenv);
+ &Apache::lonnet::appenv({'docs.markedcopy_title' => $title,
+ 'docs.markedcopy_url' => $url});
delete($env{'form.markcopy'});
}
-sub recurse_uploaded_maps {
- my ($url,$dir,$hierarchy,$titlesref,$nestref,$namesref) = @_;
- if (ref($hierarchy->{$url}) eq 'HASH') {
- my @maps = map { $hierarchy->{$url}{$_}; } sort { $a <=> $b } (keys(%{$hierarchy->{$url}}));
- my @titles = map { $titlesref->{$url}{$_}; } sort { $a <=> $b } (keys(%{$titlesref->{$url}}));
- my (@uploaded,@names,%shorter);
- for (my $i=0; $i<@maps; $i++) {
- my ($inner) = ($maps[$i] =~ m{^/uploaded/$match_domain/$match_courseid/(?:default|supplemental)_(\d+)\.(?:page|sequence)$});
- if ($inner ne '') {
- push(@uploaded,$inner);
- push(@names,&escape($titles[$i]));
- $shorter{$maps[$i]} = $inner;
- }
- }
- $$nestref .= "$dir:".join(',',@uploaded).'&';
- $$namesref .= "$dir:".(join(',',@names)).'___&&&___';
- foreach my $map (@maps) {
- if ($shorter{$map} ne '') {
- &recurse_uploaded_maps($map,$shorter{$map},$hierarchy,$titlesref,$nestref,$namesref);
- }
- }
- }
- return;
-}
-
sub print_paste_buffer {
- my ($r,$container,$folder,$coursedom,$coursenum) = @_;
+ my ($r,$container,$folder) = @_;
return if (!defined($env{'docs.markedcopy_url'}));
- my ($is_external,$othercourse,$fromsupp,$is_uploaded_map,$parent);
+ my $is_external;
my $extension = (split(/\./,$env{'docs.markedcopy_url'}))[-1];
if ($env{'docs.markedcopy_url'} =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?::|:))//} ) {
$is_external = 1;
}
- my ($canpaste,$nopaste,$othercrs,$areachange,$is_uploaded_map);
+ my $canpaste;
if ($folder =~ /^supplemental/) {
- $canpaste = &supp_pasteable($env{'docs.markedcopy_url'});
- unless ($canpaste) {
- $nopaste = &mt('Paste into Supplemental Content unavailable for this type of content.');
- }
+ $canpaste = &supp_pasteable($env{'docs.markedcopy_url'});
} else {
$canpaste = 1;
}
+ my $pasteinfo;
if ($canpaste) {
- if ($env{'docs.markedcopy_url'} =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) {
- my $srcdom = $1;
- my $srcnum = $2;
- my $rem = $3;
- if (($srcdom ne $coursedom) || ($srcnum ne $coursenum)) {
- $othercourse = 1;
- if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) {
- if ($canpaste) {
- $othercrs = ' '.&mt('(from another course).');
- }
- } else {
- $canpaste = 0;
- $nopaste = &mt('Paste from another course unavailable.')
- }
- }
- if ($rem =~ m{^(default|supplemental)_?(\d*)\.(?:page|sequence)$}) {
- my $prefix = $1;
- $parent = $2;
- if ($folder !~ /^\Q$prefix\E/) {
- $areachange = 1;
- }
- $is_uploaded_map = 1;
- }
- }
+ $pasteinfo = '
@@ -2331,7 +1663,7 @@ END
$form_end
-$removelink
+ $lt{'rm'}
$cutlink
$lt{'rn'}
$copylink
@@ -2371,38 +1703,44 @@ END
}
}
- my $editlink;
my $orig_url = $url;
$orig_url=~s{http(:|:)//https(:|:)//}{https$2//};
my $external = ($url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/});
- if (!$supplementalflag && $residx && $symb) {
- if ($container eq 'page') {
- $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
- $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
- }
- if ((!$isfolder) && (!$ispage)) {
- (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;
- $external = 1;
- }
- if (&Apache::lonnet::symbverify($symb,$url)) {
- $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
- } else {
- $url='';
- }
+ 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.
+ '.sequence').
+ '___'.$residx.'___'.
+ &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;
+ $external = 1;
+ }
+ 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);
+ }
}
my ($rand_pick_text,$rand_order_text);
if ($isfolder || $extension eq 'sequence') {
@@ -2419,7 +1757,7 @@ END
'parameter_encrypturl'))[0]=~/^yes$/i)
.':'.((&LONCAPA::map::getparameter($orderidx,
'parameter_randomorder'))[0]=~/^yes$/i);
- $url.='folderpath='.&escape($folderpath);
+ $url.='folderpath='.&escape($folderpath).$cpinfo;
my $rpicknum = (&LONCAPA::map::getparameter($orderidx,
'parameter_randompick'))[0];
my $rpckchk;
@@ -2448,51 +1786,23 @@ $form_common.'
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);
+ '&pagesymb='.&escape($symb).$cpinfo;
}
- if ($allowed) {
- my $fileloc =
- &Apache::lonnet::declutter(&Apache::lonnet::filelocation('',$orig_url));
-
- if ($external) {
- $editlink = <<"EXTLNK";
-
-
- $lt{'ed'}
-
-
-
-
- $lt{'ul'}
-
- $lt{'pr'}
-
-
- $lt{'ti'}
-
- $uploadtag
-
-
-
-
-
-EXTLNK
- } else {
- my ($cfile,$home,$switchserver,$forceedit,$forceview) =
- &Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url);
- if (($cfile ne '') && ($symb ne '')) {
- my $jscall =
- &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,
- $switchserver,
- $forceedit,
- undef,$symb);
- if ($jscall) {
- $editlink = ' '.&mt('Edit').' ';
- }
- }
- }
+ if (($external) && ($allowed)) {
+ my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';
+ $external = ' '.&mt('Edit').' ';
+ } else {
+ undef($external);
}
my $reinit;
if ($crstype eq 'Community') {
@@ -2518,7 +1828,7 @@ EXTLNK
} else {
$line.=$title.' '.$reinit.' ';
}
- $line.=$editlink." ";
+ $line.=$external."";
$rand_pick_text = ' ' if ($rand_pick_text eq '');
$rand_order_text = ' ' if ($rand_order_text eq '');
if (($allowed) && ($folder!~/^supplemental/)) {
@@ -2549,30 +1859,6 @@ ENDPARMS
return $line;
}
-sub newmap_suffix {
- my ($area,$container,$coursedom,$coursenum) = @_;
- my ($prefix,$idtype,$errtext,$locknotfreed);
- $prefix = 'docs';
- if ($area eq 'supplemental') {
- $prefix = 'supp';
- }
- $prefix .= $container;
- $idtype = 'concat';
- my ($suffix,$freedlock,$error) =
- &Apache::lonnet::get_timebased_id($prefix,'num','uploadedmaps',
- $coursedom,$coursenum);
- if (!$suffix) {
- $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new folder/page.');
- if ($error) {
- $errtext .= ' '.$error;
- }
- }
- if ($freedlock ne 'ok') {
- $locknotfreed = ''.&mt('There was a problem removing a lockfile. This will prevent creation of additional folders or composite pages in this course. Please contact the domain coordinator for your LON-CAPA domain.').'
';
- }
- return ($suffix,$errtext,$locknotfreed);
-}
-
=pod
=item tiehash()
@@ -2938,8 +2224,7 @@ ENDHEADERS
''.&mt('History').' '.
'');
foreach my $key (sort(keys(%changes))) {
- #excludes not versionable problems from resource version history:
- next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/);
+ if ($changes{$key}>$starttime) {
my ($root,$extension)=($key=~/^(.*)\.(\w+)$/);
my $currentversion=&Apache::lonnet::getversion($key);
if ($currentversion<0) {
@@ -3105,9 +2390,9 @@ sub init_breadcrumbs {
sub create_list_elements {
my @formarr = @_;
my $list = '';
- foreach my $button (@formarr){
- foreach my $picture (keys(%{$button})) {
- $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text', id => ''});
+ for my $button (@formarr){
+ for my $picture(keys %$button) {
+ $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
}
}
return $list;
@@ -3130,6 +2415,7 @@ sub startContentScreen {
if (($mode eq 'navmaps') || ($mode eq 'supplemental')) {
$output .= ' '.&mt('Content Overview').' '."\n";
$output .= ' '.&mt('Content Search').' '."\n";
+ $output .= ' '.&mt('Content Index').' '."\n";
$output .= ''.&mt('Supplemental Content').' ';
} else {
$output .= ' '.&mt('Content Editor').' '."\n";
@@ -3176,8 +2462,7 @@ sub handler {
'Adding_External_Resource','Navigate_Content',
'Adding_Folders','Docs_Overview', 'Load_Map',
'Supplemental','Score_Upload_Form','Adding_Pages',
- 'Importing_LON-CAPA_Resource','Importing_IMS_Course',
- 'Uploading_From_Harddrive',
+ 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
'Check_Resource_Versions','Verify_Content') {
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);
}
@@ -3468,11 +2753,6 @@ sub handler {
onload => "javascript:resize_scrollbox('contentscroll','1','1');",
};
}
- if ($env{'docs.markedcopy_url'}) {
- $script .= &paste_popup_js();
- }
- my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
- &mt('Switch server?');
}
# -------------------------------------------------------------------- Body tag
$script = '