--- loncom/interface/londocs.pm 2022/10/19 00:03:10 1.682
+++ loncom/interface/londocs.pm 2023/03/27 18:41:04 1.698
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.682 2022/10/19 00:03:10 raeburn Exp $
+# $Id: londocs.pm,v 1.698 2023/03/27 18:41:04 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -183,43 +183,62 @@ sub default_folderpath {
}
}
-sub validate_folderpath {
- my ($supplementalflag) = @_;
- if ($env{'form.folderpath'} ne '') {
- my @items = split(/\&/,$env{'form.folderpath'});
- my $badpath;
- for (my $i=0; $i<@items; $i++) {
- my $odd = $i%2;
- if (($odd) && (!$supplementalflag) && ($items[$i] !~ /^[^:]*:(|\d+):(|1):(|1):(|1):(|1)$/)) {
- $badpath = 1;
- } elsif ((!$odd) && ($items[$i] !~ /^(default|supplemental)(|_\d+)$/)) {
- $badpath = 1;
- }
- last if ($badpath);
- }
- if ($badpath) {
- delete($env{'form.folderpath'});
- }
- }
- return;
-}
-
-sub validate_suppath {
+sub validate_supppath {
+ my ($coursenum,$coursedom) = @_;
+ my $backto;
if ($env{'form.supppath'} ne '') {
my @items = split(/\&/,$env{'form.supppath'});
- my $badpath;
+ my ($badpath,$got_supp,$supppath,%supphidden,%suppids);
for (my $i=0; $i<@items; $i++) {
my $odd = $i%2;
if ((!$odd) && ($items[$i] !~ /^supplemental(|_\d+)$/)) {
$badpath = 1;
+ last;
+ } elsif ($odd) {
+ my $suffix;
+ my $idx = $i-1;
+ if ($items[$i] =~ /^([^:]*)::(|1):::$/) {
+ $backto .= '&'.$1;
+ } elsif ($items[$idx] eq 'supplemental') {
+ $backto .= '&'.$items[$i];
+ } else {
+ $backto .= '&'.$items[$i];
+ my $is_hidden;
+ unless ($got_supp) {
+ my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
+ if (ref($supplemental) eq 'HASH') {
+ if (ref($supplemental->{'hidden'}) eq 'HASH') {
+ %supphidden = %{$supplemental->{'hidden'}};
+ }
+ if (ref($supplemental->{'ids'}) eq 'HASH') {
+ %suppids = %{$supplemental->{'ids'}};
+ }
+ }
+ $got_supp = 1;
+ }
+ if (ref($suppids{"/uploaded/$coursedom/$coursenum/$items[$idx].sequence"}) eq 'ARRAY') {
+ my $mapid = $suppids{"/uploaded/$coursedom/$coursenum/$items[$idx].sequence"}->[0];
+ if ($supphidden{$mapid}) {
+ $is_hidden = 1;
+ }
+ }
+ $suffix = '::'.$is_hidden.':::';
+ }
+ $supppath .= '&'.$items[$i].$suffix;
+ } else {
+ $supppath .= '&'.$items[$i];
+ $backto .= '&'.$items[$i];
}
- last if ($badpath);
}
if ($badpath) {
delete($env{'form.supppath'});
+ } else {
+ $supppath =~ s/^\&//;
+ $backto =~ s/^\&//;
+ $env{'form.supppath'} = $supppath;
}
}
- return;
+ return $backto;
}
sub dumpcourse {
@@ -1188,7 +1207,13 @@ sub docs_change_log {
}
$r->print('');
if ($docslog{$id}{'logentry'}{'parameter_res'}) {
- $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':
');
+ my ($title,$url) = split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'},3);
+ if ($title eq '') {
+ ($title) = ($url =~ m{/([^/]+)$});
+ } elsif ($is_supp) {
+ $title = &Apache::loncommon::parse_supplemental_title($title);
+ }
+ $r->print(&LONCAPA::map::qtescape($title).':');
foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder','gradable') {
if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
# FIXME: internationalization seems wrong here
@@ -3090,7 +3115,7 @@ sub update_parameter {
my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
$name=&LONCAPA::map::qtescape($name);
$url=&LONCAPA::map::qtescape($url);
- next unless ($name && $url);
+ next unless $url;
my $is_map;
if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {
$is_map = 1;
@@ -3277,28 +3302,11 @@ sub editor {
return $errtext if ($fatal);
}
- my (%supphidden,%suppids,$suppmapid);
-
if ($#LONCAPA::map::order<1) {
my $idx=&LONCAPA::map::getresidx();
if ($idx<=0) { $idx=1; }
$LONCAPA::map::order[0]=$idx;
$LONCAPA::map::resources[$idx]='';
- } elsif ($supplementalflag && !$allowed) {
- my ($supplemental) = &Apache::lonnet::get_supplemental($coursenum,$coursedom);
- if (ref($supplemental) eq 'HASH') {
- if (ref($supplemental->{'hidden'}) eq 'HASH') {
- %supphidden = %{$supplemental->{'hidden'}};
- }
- if (ref($supplemental->{'ids'}) eq 'HASH') {
- %suppids = %{$supplemental->{'ids'}};
- }
- }
- if ($folder eq 'supplemental') {
- $suppmapid = 0;
- } elsif ($folder =~ /^supplemental_(\d+)$/) {
- $suppmapid = $1;
- }
}
# ------------------------------------------------------------ Process commands
@@ -3559,6 +3567,21 @@ sub editor {
$r->print('');
}
+ if ((!$allowed) && ($folder =~ /^supplemental_\d+$/)) {
+ my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
+ if (ref($supplemental) eq 'HASH') {
+ if ((ref($supplemental->{'hidden'}) eq 'HASH') &&
+ (ref($supplemental->{'ids'}) eq 'HASH')) {
+ if (ref($supplemental->{'ids'}->{"/uploaded/$coursedom/$coursenum/$folder.$container"}) eq 'ARRAY') {
+ my $mapnum = $supplemental->{'ids'}->{"/uploaded/$coursedom/$coursenum/$folder.$container"}->[0];
+ if ($supplemental->{'hidden'}->{$mapnum}) {
+ $ishidden = 1;
+ }
+ }
+ }
+ }
+ }
+
my ($to_show,$output,@allidx,@allmapidx,%filters,%lists,%curr_groups);
%filters = (
canremove => [],
@@ -3583,14 +3606,16 @@ sub editor {
}
if (($supplementalflag) && (!$allowed) && (!$env{'request.role.adv'})) {
- next if ($supphidden{$suppmapid.':'.$res});
+ if (($ishidden) || ((&LONCAPA::map::getparameter($res,'parameter_hiddenresource'))[0]=~/^yes$/i)) {
+ $idx++;
+ next;
+ }
}
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
$coursenum,$coursedom,$crstype,
$pathitem,$supplementalflag,$container,
\%filters,\%curr_groups,$ltitoolsref,$canedit,
- $isencrypted,$navmapref,$hostname,
- \%supphidden,\%suppids,$suppmapid);
+ $isencrypted,$ishidden,$navmapref,$hostname);
$idx++;
$shown++;
}
@@ -3972,13 +3997,14 @@ sub is_supplemental_title {
sub entryline {
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom,
$crstype,$pathitem,$supplementalflag,$container,$filtersref,$currgroups,
- $ltitoolsref,$canedit,$isencrypted,$navmapref,$hostname,
- $supphidden,$suppids,$suppmapid)=@_;
- my ($foldertitle,$renametitle,$oldtitle);
+ $ltitoolsref,$canedit,$isencrypted,$ishidden,$navmapref,$hostname)=@_;
+ my ($foldertitle,$renametitle,$oldtitle,$encodedtitle);
if (&is_supplemental_title($title)) {
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title);
+ $encodedtitle=$title;
} else {
$title=&HTML::Entities::encode($title,'"<>&\'');
+ $encodedtitle=$title;
$renametitle=$title;
$foldertitle=$title;
}
@@ -4205,6 +4231,7 @@ END
my $ispage;
my $containerarg;
my $folderurl;
+ my $plainurl;
if ($uploaded) {
if (($extension eq 'sequence') || ($extension eq 'page')) {
$url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/;
@@ -4223,7 +4250,7 @@ END
$url='/adm/supplemental?';
}
} else {
- &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);
+ $plainurl = $url;
}
}
@@ -4273,7 +4300,7 @@ END
$nomodal = 1;
}
}
- my ($checkencrypt,$shownurl);
+ my $checkencrypt;
if (!$env{'request.role.adv'}) {
if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) ||
($isencrypted) || (&Apache::lonnet::EXT('resource.0.encrypturl',$symb) =~ /^yes$/i)) {
@@ -4293,7 +4320,7 @@ END
my $currenc = $env{'request.enc'};
$env{'request.enc'} = 1;
$shownsymb = &Apache::lonenc::encrypted($symb);
- $shownurl = &Apache::lonenc::encrypted($url);
+ my $shownurl = &Apache::lonenc::encrypted($url);
if (&Apache::lonnet::symbverify($symb,$url)) {
$url = $shownurl;
} else {
@@ -4308,7 +4335,8 @@ END
$url = &Apache::lonnet::clutter($url);
}
}
- $shownurl = $url;
+ } else {
+ $url = '';
}
unless ($env{'request.role.adv'}) {
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
@@ -4319,8 +4347,8 @@ END
$hiddenres = 1;
}
}
- if ($url ne '') {
- $url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&escape($shownsymb);
+ if (($url ne '') && ($shownsymb ne '')) {
+ $url .= (($url=~/\?/)?'&':'?').'symb='.&escape($shownsymb);
}
}
} elsif ($supplementalflag) {
@@ -4349,6 +4377,22 @@ END
}
$nomodal = 1;
}
+ } elsif (($uploaded) && (!$allowed) && ($url ne '/adm/supplemental?')) {
+ my $embstyle=&Apache::loncommon::fileembstyle($extension);
+ unless ($embstyle eq 'ssi') {
+ if (($embstyle eq 'img')
+ || ($embstyle eq 'emb')
+ || ($embstyle eq 'wrp')) {
+ $url='/adm/wrapper'.$url;
+ } elsif ($url !~ /\.(sequence|page)$/) {
+ $url='/adm/coursedocs/showdoc'.$url;
+ }
+ }
+ }
+ unless ($allowed && $env{'request.role.adv'}) {
+ if ($ishidden || (&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
+ $hiddenres = 1;
+ }
}
}
my ($rand_pick_text,$rand_order_text,$hiddenfolder);
@@ -4360,10 +4404,8 @@ END
if (!$allowed && $supplementalflag) {
$folderpath.=$containerarg.'&'.$foldername;
$url.='folderpath='.&escape($folderpath);
- if (ref($supphidden) eq 'HASH') {
- if ($supphidden->{$suppmapid.':'.$residx}) {
- $hiddenfolder = 1;
- }
+ if ($ishidden || (&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
+ $hiddenfolder = 1;
}
} else {
my $rpicknum = (&LONCAPA::map::getparameter($orderidx,
@@ -4450,7 +4492,7 @@ $form_end;
$url .= ($url =~ /\?/) ? '&':'?';
$url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"');
if ($title) {
- $url .= '&title='.&HTML::Entities::encode($renametitle,'<>&"');
+ $url .= '&title='.$encodedtitle;
}
if ((($isexternal) || ($isexttool)) && $orderidx) {
$url .= '&idx='.$orderidx;
@@ -4458,11 +4500,6 @@ $form_end;
if ($anchor ne '') {
$url .= '&anchor='.&HTML::Entities::encode($anchor,'"<>&');
}
- if (ref($supphidden) eq 'HASH') {
- if ($supphidden->{$suppmapid.':'.$residx}) {
- $hiddenres = 1;
- }
- }
}
my ($tdalign,$tdwidth);
if ($allowed) {
@@ -4521,9 +4558,18 @@ $form_end;
}
}
$line.='';
- my $link;
+ my ($link,$nolink);
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
- $line.=' ';
+ if ($allowed && !$env{'request.role.adv'} && !$isfolder && !$ispage) {
+ if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
+ $nolink = 1;
+ }
+ }
+ if ($nolink) {
+ $line .= ' ';
+ } else {
+ $line.=' ';
+ }
} elsif ($url) {
if ($anchor ne '') {
if ($supplementalflag) {
@@ -4538,7 +4584,14 @@ $form_end;
$link = $url;
}
$link = &js_escape($link.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.$anchor);
- if ($nomodal) {
+ if ($allowed && !$env{'request.role.adv'} && !$isfolder && !$ispage && !$uploaded) {
+ if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
+ $nolink = 1;
+ }
+ }
+ if ($nolink) {
+ $line.=' ';
+ } elsif ($nomodal) {
$line.=''.
' ';
} else {
@@ -4550,7 +4603,11 @@ $form_end;
}
$line.=' | ';
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
- $line.=''.$title.'';
+ if ($nolink) {
+ $line.=$title;
+ } else {
+ $line.=''.$title.'';
+ }
if (!$allowed && $supplementalflag && $canedit && $isfolder) {
my $editicon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png';
my $editurl = $url;
@@ -4563,7 +4620,9 @@ $form_end;
$line.= ' ('.&mt('hidden').') ';
}
} elsif ($url) {
- if ($nomodal) {
+ if ($nolink) {
+ $line.=$title;
+ } elsif ($nomodal) {
$line.=''.
$title.'';
} else {
@@ -4582,6 +4641,11 @@ $form_end;
$line .= ' | ';
$rand_pick_text = ' ' if ($rand_pick_text eq '');
$rand_order_text = ' ' if ($rand_order_text eq '');
+ if ($uploaded && $url && !$isfolder && !$ispage) {
+ if (($plainurl ne '') && ($env{'request.role.adv'} || $allowed || !$hiddenres)) {
+ &Apache::lonnet::allowuploaded('/adm/coursedoc',$plainurl);
+ }
+ }
if ($allowed) {
my %lt=&Apache::lonlocal::texthash(
'hd' => 'Hidden',
@@ -4589,7 +4653,7 @@ $form_end;
my ($enctext,$hidtext,$formhidden,$formurlhidden);
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
$hidtext = ' checked="checked"';
- if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) {
+ if (($ishash) && (ref($filtersref->{'hiddenresource'}) eq 'ARRAY')) {
push(@{$filtersref->{'hiddenresource'}},$orderidx);
}
}
@@ -5644,11 +5708,14 @@ sub handler {
if ($env{'form.tools'}) { $toolsflag=1; }
if ($env{'form.folderpath'} ne '') {
- &validate_folderpath($supplementalflag);
+ &Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom);
}
+ my $backto_supppath;
if ($env{'form.supppath'} ne '') {
- &validate_suppath();
+ if ($supplementalflag && $allowed) {
+ $backto_supppath = &validate_supppath($coursenum,$coursedom);
+ }
}
my $script='';
@@ -5669,10 +5736,10 @@ sub handler {
&Apache::loncommon::symb_to_docspath($env{'form.symb'},\$navmap);
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>
$env{'form.command'}.'_'.$env{'form.symb'}});
- } elsif ($env{'form.supppath'} ne '') {
+ } elsif (($env{'form.supppath'} ne '') && $supplementalflag && $allowed) {
$env{'form.folderpath'}=$env{'form.supppath'};
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>
- $env{'form.command'}.'_'.$env{'form.supppath'}});
+ $env{'form.command'}.'_'.$backto_supppath});
}
} elsif ($env{'form.command'} eq 'editdocs') {
$env{'form.folderpath'} = &default_folderpath($coursenum,$coursedom,\$navmap);
@@ -5708,7 +5775,7 @@ sub handler {
undef($env{'form.folderpath'});
}
if ($env{'form.folderpath'} ne '') {
- &validate_folderpath($supplementalflag);
+ &Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom);
}
}
@@ -5724,10 +5791,10 @@ sub handler {
.'&'.
$env{'form.folderpath'};
}
-# If allowed and user's role is not advanced check folderpath is not hidden
- if (($allowed) && (!$env{'request.role.adv'}) &&
- ($env{'form.folderpath'} ne '') && (!$supplementalflag)) {
- my $folderurl;
+# If allowed and user's role is not advanced check folderpath is not hidden
+ my $hidden_and_empty;
+ if (($allowed) && (!$env{'request.role.adv'}) && ($env{'form.folderpath'} ne '')) {
+ my ($folderurl,$foldername,$hiddenfolder);
my @pathitems = split(/\&/,$env{'form.folderpath'});
my $folder = $pathitems[-2];
if ($folder eq '') {
@@ -5739,21 +5806,74 @@ sub handler {
} else {
$folderurl .= '.sequence';
}
- unless (ref($navmap)) {
- $navmap = Apache::lonnavmaps::navmap->new();
- }
- if (ref($navmap)) {
- if (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {
- my @resources = $navmap->retrieveResources($folderurl,$filterFunc,1,1);
- unless (@resources) {
- undef($env{'form.folderpath'});
+ if ($supplementalflag) {
+ ($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*)::(|1):::$/);
+ $foldername = &HTML::Entities::decode(&unescape($foldername));
+ my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
+ if (ref($supplemental) eq 'HASH') {
+ my ($suppmap,$suppmapnum);
+ if ($folder eq 'supplemental') {
+ $suppmap = 'default';
+ $suppmapnum = 0;
+ } elsif ($folder =~ /^supplemental_(\d+)$/) {
+ $suppmap = $1;
+ $suppmapnum = $suppmap;
+ }
+ if ($hiddenfolder) {
+ my $hascontent;
+ foreach my $key (reverse(sort(keys(%{$supplemental->{'ids'}})))) {
+ if ($key =~ m{^\Q/uploaded/$coursedom/$coursenum/supplemental/$suppmap/\E}) {
+ $hascontent = 1;
+ } elsif (ref($supplemental->{'ids'}->{$key}) eq 'ARRAY') {
+ foreach my $id (@{$supplemental->{'ids'}->{$key}}) {
+ if ($id =~ /^$suppmapnum\:/) {
+ $hascontent = 1;
+ last;
+ }
+ }
+ }
+ last if ($hascontent);
+ }
+ unless ($hascontent) {
+ if ($foldername ne '') {
+ $hidden_and_empty = $foldername;
+ } else {
+ $hidden_and_empty = $folder;
+ }
+ }
+ }
+ }
+ } else {
+ unless (ref($navmap)) {
+ $navmap = Apache::lonnavmaps::navmap->new();
+ }
+ ($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*):|\d+:|1:(|1):|1:|1$/);
+ $foldername = &HTML::Entities::decode(&unescape($foldername));
+ if (ref($navmap)) {
+ if ($hiddenfolder ||
+ (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes')) {
+ my @resources = $navmap->retrieveResources($folderurl,$filterFunc,1,1);
+ unless (@resources) {
+ if ($foldername ne '') {
+ $hidden_and_empty = $foldername;
+ } else {
+ $hidden_and_empty = $folder;
+ }
+ }
}
}
}
+ if ($hidden_and_empty ne '') {
+ splice(@pathitems,-2);
+ if (@pathitems) {
+ $env{'form.folderpath'} = join('&',@pathitems);
+ } else {
+ undef($env{'form.folderpath'});
+ }
+ }
}
}
-
# If after all of this, we still don't have any paths, make them
unless ($env{'form.folderpath'}) {
if ($supplementalflag) {
@@ -5847,8 +5967,14 @@ sub handler {
&inject_data_js().
&Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid).
&Apache::lonextresedit::extedit_javascript(\%ltitools);
+ my $onload = "javascript:resize_scrollbox('contentscroll','1','1');";
+ if ($hidden_and_empty ne '') {
+ my $alert = &mt("Additional privileges required to edit empty and hidden folder: '[_1]'",
+ $hidden_and_empty);
+ $onload .= "javascript:alert('".&js_escape($alert)."');";
+ }
$addentries = {
- onload => "javascript:resize_scrollbox('contentscroll','1','1');",
+ onload => $onload,
};
}
$script .= &paste_popup_js();
@@ -5872,7 +5998,8 @@ sub handler {
if ($showdoc) {
my $args;
if ($supplementalflag) {
- my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$env{'form.title'},1);
+ my $title = &HTML::Entities::encode($env{'form.title'},'\'"<>&');
+ my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
$args = {'bread_crumbs' => $brcrum};
} else {
$args = {'force_register' => $showdoc};
@@ -5931,6 +6058,7 @@ sub handler {
my %codebase = ();
my ($upload_result,$upload_output,$uploadphase);
if ($canedit) {
+ undef($suppchanges);
if (($env{'form.uploaddoc.filename'}) &&
($env{'form.cmd'}=~/^upload_(\w+)/)) {
my $context = $1;
@@ -5942,6 +6070,10 @@ sub handler {
if ($hadchanges) {
&mark_hash_old();
}
+ if ($suppchanges) {
+ &Apache::lonnet::update_supp_caches($coursedom,$coursenum);
+ undef($suppchanges);
+ }
$r->print($upload_output);
} elsif ($env{'form.phase'} eq 'upload_embedded') {
# Process file upload - phase two - upload embedded objects
@@ -6010,6 +6142,7 @@ sub handler {
'stpr' => 'Standard Problem',
'news' => 'New sub-directory',
'crpr' => 'Create Problem',
+ 'swit' => 'Switch Server',
'drbx' => 'Drop Box',
'scuf' => 'External Scores (handgrade, upload, clicker)',
'bull' => 'Discussion Board',
@@ -6030,6 +6163,7 @@ sub handler {
'dire' => 'Directory:',
'cate' => 'Category:',
'tmpl' => 'Template:',
+ 'empd' => 'No resources found',
'comment' => 'Comment',
'parse' => 'Upload embedded images/multimedia files if HTML file',
'bb5' => 'Blackboard 5',
@@ -6168,23 +6302,30 @@ FUFORM
SEDFFORM
my $importcrsresform;
my ($numdirs,$pickfile) =
- &Apache::loncommon::import_crsauthor_form('crsresimportform','coursepath','coursefile',
+ &Apache::loncommon::import_crsauthor_form('coursepath','coursefile',
"resize_scrollbox('contentscroll','1','0');",
undef,'res');
if ($pickfile) {
$importcrsresform=(<