--- loncom/interface/londocs.pm 2013/01/09 17:17:27 1.484.2.22
+++ loncom/interface/londocs.pm 2012/07/13 13:36:24 1.491
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.484.2.22 2013/01/09 17:17:27 raeburn Exp $
+# $Id: londocs.pm,v 1.491 2012/07/13 13:36:24 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,7 +41,6 @@ use Apache::lonclonecourse;
use Apache::lonnavmaps;
use Apache::lonnavdisplay();
use Apache::lonuserstate();
-use Apache::lonextresedit();
use HTML::Entities;
use HTML::TokeParser;
use GDBM_File;
@@ -70,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;
@@ -310,11 +305,67 @@ sub group_import {
join(':', ($name, $url, $ext, 'normal', 'res'));
}
}
- return &storemap($coursenum, $coursedom, $folder.'.'.$container,1);
+ return &storemap($coursenum, $coursedom, $folder.'.'.$container);
+}
+
+sub breadcrumbs {
+ my ($allowed,$crstype)=@_;
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ my (@folders);
+ if ($env{'form.pagepath'}) {
+ @folders = split('&',$env{'form.pagepath'});
+ } else {
+ @folders=split('&',$env{'form.folderpath'});
+ }
+ my $folderpath;
+ my $cpinfo='';
+ my $plain='';
+ my $randompick=-1;
+ my $isencrypted=0;
+ my $ishidden=0;
+ my $is_random_order=0;
+ while (@folders) {
+ my $folder=shift(@folders);
+ my $foldername=shift(@folders);
+ if ($folderpath) {$folderpath.='&';}
+ $folderpath.=$folder.'&'.$foldername;
+ my $url;
+ if ($allowed) {
+ $url = '/adm/coursedocs?folderpath=';
+ } else {
+ $url = '/adm/supplemental?folderpath=';
+ }
+ $url .= &escape($folderpath);
+ my $name=&unescape($foldername);
+# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername
+ $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;
+ if ($1 ne '') {
+ $randompick=$1;
+ } else {
+ $randompick=-1;
+ }
+ if ($2) { $ishidden=1; }
+ if ($3) { $isencrypted=1; }
+ if ($4 ne '') { $is_random_order = 1; }
+ if ($folder eq 'supplemental') {
+ $name = &mt('Supplemental '.$crstype.' Content');
+ }
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {'href'=>$url.$cpinfo,
+ 'title'=>$name,
+ 'text'=>$name,
+ 'no_mt'=>1,
+ });
+ $plain.=$name.' > ';
+ }
+ $plain=~s/\>\;\s*$//;
+ return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
+ undef, undef, 1 ),$randompick,$ishidden,
+ $isencrypted,$plain,$is_random_order);
}
sub log_docs {
- return &Apache::lonnet::write_log('course','docslog',@_);
+ return &Apache::lonnet::instructor_log('docslog',@_);
}
{
@@ -391,15 +442,17 @@ sub docs_change_log {
my %orderhash;
my $container='sequence';
my $pathitem;
- if ($env{'form.folderpath'} =~ /\:1$/) {
+ if ($env{'form.pagepath'}) {
$container='page';
+ $pathitem = '';
+ } else {
+ my $folderpath=$env{'form.folderpath'};
+ if ($folderpath eq '') {
+ $folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Documents'));
+ }
+ $pathitem = '';
}
- my $folderpath=$env{'form.folderpath'};
- if ($folderpath eq '') {
- $folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Documents').':::::');
- }
- $pathitem = '';
my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container";
my $jumpto = $readfile;
$jumpto =~ s{^/}{};
@@ -407,8 +460,7 @@ sub docs_change_log {
if ($supplementalflag) {
$tid = 2;
}
- my ($breadcrumbtrail) =
- &Apache::lonhtmlcommon::docs_breadcrumbs($allowed,$crstype,1);
+ my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
$r->print($breadcrumbtrail.
&generate_edit_table($tid,\%orderhash,undef,$iconpath,$jumpto,
$readfile));
@@ -560,7 +612,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'}));
@@ -581,204 +633,75 @@ 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);
+ 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 = '
'.&mt('Done').'
'); - $r->print(&endContentScreen()); } @@ -2798,7 +2413,7 @@ sub checkversions { if ($env{'form.timerange'} eq 'all') { # show all documents $header=&mt('All Documents in '.$crstype); - $allsel=' selected="selected"'; + $allsel=1; foreach my $key (keys(%hash)) { if ($key=~/^ids\_(\/res\/.+)$/) { my $src=$1; @@ -2819,19 +2434,19 @@ sub checkversions { .&mt('seconds'); if ($env{'form.timerange'}==-1) { $seltext='since start of course'; - $startsel=' selected="selected"'; + $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="selected"'; + $monthsel='selected'; } elsif ($env{'form.timerange'}==604800) { $seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; - $weeksel=' selected="selected"'; + $weeksel='selected'; } elsif ($env{'form.timerange'}==86400) { $seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; - $daysel=' selected="selected"'; + $daysel='selected'; } $header=&mt('Content changed').' '.$seltext; } else { @@ -2869,11 +2484,11 @@ sub checkversions { @@ -2889,93 +2504,110 @@ $lt{'sc'}: +'.&mt('Resources').' | '. - "$lt{'mr'} | ". - "$lt{'ve'} | ". - "$lt{'vu'} | ". - ''.&mt('History').' | '. - &Apache::loncommon::end_data_table_header_row() - ); + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''.&mt('Resources').' | '. + "$lt{'mr'} | ". + "$lt{'ve'} | ". + "$lt{'vu'} | ". + ''.&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/); - my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); - my $currentversion=&Apache::lonnet::getversion($key); - if ($currentversion<0) { - $currentversion=''.&mt('Could not be determined.').''; - } - my $linkurl=&Apache::lonnet::clutter($key); + if ($changes{$key}>$starttime) { + my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); + my $currentversion=&Apache::lonnet::getversion($key); + if ($currentversion<0) { + $currentversion=''.&mt('Could not be determined.').''; + } + my $linkurl=&Apache::lonnet::clutter($key); $r->print( + &Apache::loncommon::end_data_table_header_row(). &Apache::loncommon::start_data_table_row(). - ''.&Apache::lonnet::gettitle($linkurl).' '. + ' | '.&Apache::lonnet::gettitle($linkurl).' '. ''.$linkurl.' | '.
- ''.$currentversion.' ('. + ' | '.$currentversion.' ('. &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate')).') | '.
- '' - ); - # Used in course - my $usedversion=$hash{'version_'.$linkurl}; - if (($usedversion) && ($usedversion ne 'mostrecent')) { - if ($usedversion != $currentversion) { + ' | '); +# Used in course + my $usedversion=$hash{'version_'.$linkurl}; + if (($usedversion) && ($usedversion ne 'mostrecent')) { + if($usedversion != $currentversion){ $r->print(''.$usedversion.''); - } else { + }else{ $r->print($usedversion); } + } else { + $r->print($currentversion); + } + $r->print(' | '); +# Set version + $r->print(&Apache::loncommon::select_form($setversions{$linkurl}, + 'set_version_'.$linkurl, + {'select_form_order' => + ['',1..$currentversion,'mostrecent'], + '' => '', + 'mostrecent' => &mt('most recent'), + map {$_,$_} (1..$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; + } + } + # + # 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 % $num_ver_col == 0) { + $entries_per_col = $num_entries/$num_ver_col; } else { - $r->print($currentversion); + $entries_per_col = $num_entries/$num_ver_col + 1; } - $r->print(' | '); - # Set version - $r->print(&Apache::loncommon::select_form( - $setversions{$linkurl}, - 'set_version_'.$linkurl, - {'select_form_order' => ['',1..$currentversion,'mostrecent'], - '' => '', - 'mostrecent' => &mt('most recent'), - map {$_,$_} (1..$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; - } - } - $r->print(' | '); - # List all available versions - $r->print(''); - for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { - my $url=$root.'.'.$prevvers.'.'.$extension; - $r->print( - '' - .'' - .&mt('Version [_1]',$prevvers).'' - .' ('.&Apache::lonlocal::locallocaltime( - &Apache::lonnet::metadata($url,'lastrevisiondate')) - .')'); - if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') { - $r->print( - ' &'). - '" target="diffs">'.&mt('Diffs').''); + my $entries_count = 0; + $r->print(' | ');
+ my $cols_output = 1;
+ for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
+ 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(' '.&mt('Diffs').'');
+ }
+ $r->print(' '); + if (++$entries_count % $entries_per_col == 0) { + $r->print(' | ');
+ if ($cols_output != $num_ver_col) {
+ $r->print(''); + $cols_output++; + } + } + } + while($cols_output++ < $num_ver_col) { + $r->print(' | ');
}
- $r->print(' '); - } - $r->print(' | '.&Apache::loncommon::end_data_table_row());
+ }
}
- $r->print(
- &Apache::loncommon::end_data_table().
- ''.
- ''
- );
+ $r->print(''.&Apache::loncommon::end_data_table_row().
+ &Apache::loncommon::end_data_table().
+ '');
&untiehash();
- $r->print(&endContentScreen());
}
sub mark_hash_old {
@@ -3007,6 +2639,11 @@ sub changewarning {
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();
@@ -3047,9 +2684,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;
@@ -3072,6 +2709,7 @@ sub startContentScreen {
if (($mode eq 'navmaps') || ($mode eq 'supplemental')) {
$output .= '
---|