--- loncom/interface/londocs.pm 2012/10/02 18:08:12 1.498
+++ loncom/interface/londocs.pm 2012/11/16 23:37:15 1.509
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.498 2012/10/02 18:08:12 bisitz Exp $
+# $Id: londocs.pm,v 1.509 2012/11/16 23:37:15 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -312,62 +312,6 @@ sub group_import {
return &storemap($coursenum, $coursedom, $folder.'.'.$container,1);
}
-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',@_);
}
@@ -455,7 +399,8 @@ sub docs_change_log {
if ($folderpath eq '') {
$folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Documents'));
}
- $pathitem = '';
+ $pathitem = '';
}
my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container";
my $jumpto = $readfile;
@@ -464,7 +409,8 @@ sub docs_change_log {
if ($supplementalflag) {
$tid = 2;
}
- my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
+ my ($breadcrumbtrail) =
+ &Apache::lonhtmlcommon::docs_breadcrumbs($allowed,$crstype,1);
$r->print($breadcrumbtrail.
&generate_edit_table($tid,\%orderhash,undef,$iconpath,$jumpto,
$readfile));
@@ -1744,12 +1690,12 @@ sub handle_edit_cmd {
sub editor {
my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype,
- $supplementalflag,$orderhash,$iconpath)=@_;
+ $supplementalflag,$orderhash,$iconpath,$pathitem)=@_;
my $container= ($env{'form.pagepath'}) ? 'page'
: 'sequence';
my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
- &breadcrumbs($allowed,$crstype);
+ &Apache::lonhtmlcommon::docs_breadcrumbs($allowed,$crstype,1);
$r->print($breadcrumbtrail);
my $jumpto = "uploaded/$coursedom/$coursenum/$folder.$container";
@@ -1829,6 +1775,18 @@ sub editor {
if (defined($item)) {
my ($name,$url,$residx)=
map {&unescape($_)} split(/\=/,$item);
+ if ($url=~ m{^\Q/uploaded/$coursedom/$coursenum/\E(default|supplemental)_new\.(sequence|page)$}) {
+ my ($suffix,$errortxt,$locknotfreed) =
+ &newmap_suffix($1,$2,$coursedom,$coursenum);
+ if ($locknotfreed) {
+ $r->print($locknotfreed);
+ }
+ if ($suffix) {
+ $url =~ s/_new\./_$suffix./;
+ } else {
+ return $errortxt;
+ }
+ }
push(@imports, [$name, $url, $residx]);
}
}
@@ -1900,7 +1858,8 @@ sub editor {
unless ($name) { $name=(split(/\//,$url))[-1]; }
unless ($name) { $idx++; next; }
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
- $coursenum,$crstype);
+ $coursenum,$coursedom,$crstype,
+ $pathitem,$supplementalflag);
$idx++;
$shown++;
}
@@ -1949,7 +1908,7 @@ sub editor {
&Apache::lonhtmlcommon::add_item_funclist(
''.
- ''.
+ ''.
''.$funcname.'').
&Apache::lonhtmlcommon::end_funclist()));
}
@@ -2117,7 +2076,8 @@ sub is_supplemental_title {
# --------------------------------------------------------------- An entry line
sub entryline {
- my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$crstype)=@_;
+ my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom,
+ $crstype,$pathitem,$supplementalflag)=@_;
my ($foldertitle,$pagetitle,$renametitle);
if (&is_supplemental_title($title)) {
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title);
@@ -2131,7 +2091,6 @@ sub entryline {
my $orderidx=$LONCAPA::map::order[$index];
-
$renametitle=~s/\\/\\\\/g;
$renametitle=~s/\"\;/\\\"/g;
$renametitle=~s/ /%20/g;
@@ -2150,9 +2109,22 @@ sub entryline {
$type = $container = 'page';
$esc_path=&escape($env{'form.pagepath'});
$path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');
- $symb=&escape($env{'form.pagesymb'});
}
- my $cpinfo='';
+ my $isexternal;
+ if (!$supplementalflag && $residx) {
+ my $currurl = $url;
+ $currurl =~ s{^http(|s)(:|:)//}{/adm/wrapper/ext/};
+ if ($currurl =~ m{^/adm/wrapper/ext/}) {
+ $isexternal = 1;
+ }
+ my $path = 'uploaded/'.
+ $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
+ $env{'course.'.$env{'request.course.id'}.'.num'}.'/';
+ $symb = &Apache::lonnet::encode_symb($path.$folder.".$container",
+ $residx,
+ &Apache::lonnet::declutter($currurl));
+ }
+ my %lt;
if ($allowed) {
my $incindex=$index+1;
my $selectbox='';
@@ -2175,13 +2147,20 @@ sub entryline {
}
$selectbox.='';
}
- my %lt=&Apache::lonlocal::texthash(
+ %lt=&Apache::lonlocal::texthash(
'up' => 'Move Up',
'dw' => 'Move Down',
'rm' => 'Remove',
'ct' => 'Cut',
'rn' => 'Rename',
- 'cp' => 'Copy');
+ 'cp' => 'Copy',
+ 'ex' => 'External Resource',
+ 'ed' => 'Edit',
+ 'pr' => 'Preview',
+ 'sv' => 'Save',
+ 'ul' => 'URL',
+ 'ti' => 'Title',
+ );
my $nocopy=0;
my $nocut=0;
my $noremove=0;
@@ -2242,10 +2221,7 @@ sub entryline {
$nocopy=1;
}
}
- my $copylink=' ';
- my $cutlink=' ';
- my $removelink=' ';
-
+ my ($copylink,$cutlink,$removelink,$renamelink);
my $skip_confirm = 0;
if ( $folder =~ /^supplemental/
|| ($url =~ m{( /smppg$
@@ -2253,26 +2229,41 @@ sub entryline {
|/aboutme$
|/navmaps$
|/bulletinboard$
- |\.html$
- |^/adm/wrapper/ext)}x)) {
+ |\.html$)}x)
+ || $isexternal) {
$skip_confirm = 1;
}
- if (!$nocopy) {
+ if ($nocopy) {
+ $copylink=(<$lt{'cp'}
+ENDCOPY
+ } else {
$copylink=(<$lt{'cp'}
ENDCOPY
}
- if (!$nocut) {
+ if ($nocut) {
+ $cutlink=(<$lt{'ct'}
+ENDCUT
+ } else {
$cutlink=(<$lt{'ct'}
ENDCUT
}
- if (!$noremove) {
+ if ($noremove) {
+ $removelink=(<$lt{'rm'}
+ENDREM
+ } else {
$removelink=(<$lt{'rm'}
ENDREM
}
+ $renamelink=(<$lt{'rn'}
+ENDREN
$form_start = '
';
+ } elsif ($supplementalflag && !$allowed) {
+ $url .= ($url =~ /\?/) ? 'amp;':'?';
+ $url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"');
}
if ($ispage) {
my $pagename=&escape($pagetitle);
@@ -2426,23 +2415,59 @@ $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).$cpinfo;
+ '&pagesymb='.&escape($symb);
}
- if (($external) && ($allowed)) {
- my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';
- $external = ' '.&mt('Edit').'';
- } else {
- undef($external);
+ if ($allowed) {
+ my $fileloc =
+ &Apache::lonnet::declutter(&Apache::lonnet::filelocation('',$orig_url));
+
+ if ($external) {
+ $editlink = <<"EXTLNK";
+
+
+ $lt{'ed'}
+
+EXTLNK
+ } else {
+ my ($cfile,$home,$switchserver,$forceedit,$forceview) =
+ &Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url);
+ my $geteditlink;
+ if ($supplementalflag) {
+ if ($orig_url eq "/adm/$env{'user.domain'}/$env{'user.name'}/aboutme") {
+ $geteditlink = 1;
+ }
+ } elsif (($cfile ne '') && ($symb ne '')) {
+ $geteditlink = 1;
+ }
+ if ($geteditlink) {
+ my $jscall =
+ &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,
+ $switchserver,
+ $forceedit,
+ undef,$symb);
+ if ($jscall) {
+ $editlink = ' '.&mt('Edit').'';
+ }
+ }
+ }
}
my $reinit;
if ($crstype eq 'Community') {
@@ -2468,7 +2493,7 @@ $form_common.'
} else {
$line.=$title.' '.$reinit.'';
}
- $line.=$external."";
+ $line.=$editlink."";
$rand_pick_text = ' ' if ($rand_pick_text eq '');
$rand_order_text = ' ' if ($rand_order_text eq '');
if (($allowed) && ($folder!~/^supplemental/)) {
@@ -2499,6 +2524,30 @@ 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()
@@ -3031,9 +3080,9 @@ sub init_breadcrumbs {
sub create_list_elements {
my @formarr = @_;
my $list = '';
- for my $button (@formarr){
- for my $picture(keys %$button) {
- $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
+ foreach my $button (@formarr){
+ foreach my $picture (keys(%{$button})) {
+ $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text', id => ''});
}
}
return $list;
@@ -3103,7 +3152,8 @@ sub handler {
'Adding_External_Resource','Navigate_Content',
'Adding_Folders','Docs_Overview', 'Load_Map',
'Supplemental','Score_Upload_Form','Adding_Pages',
- 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
+ 'Importing_LON-CAPA_Resource','Importing_IMS_Course',
+ 'Uploading_From_Harddrive',
'Check_Resource_Versions','Verify_Content') {
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);
}
@@ -3194,7 +3244,7 @@ sub handler {
my $addentries = {};
my $container;
my $containertag;
- my $uploadtag;
+ my $pathitem;
# Do we directly jump somewhere?
@@ -3327,7 +3377,7 @@ sub handler {
$container='page';
$containertag = ''.
'';
- $uploadtag =
+ $pathitem =
''.
''.
'';
@@ -3341,7 +3391,7 @@ sub handler {
}
}
$containertag = '';
- $uploadtag = '';
+ $pathitem = '';
}
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
$showdoc='/'.$1;
@@ -3397,6 +3447,10 @@ sub handler {
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 = '