--- loncom/interface/londocs.pm 2016/08/06 20:00:29 1.484.2.63
+++ loncom/interface/londocs.pm 2016/10/31 20:48:30 1.484.2.66
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.484.2.63 2016/08/06 20:00:29 raeburn Exp $
+# $Id: londocs.pm,v 1.484.2.66 2016/10/31 20:48:30 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3608,7 +3608,7 @@ END
}
}
- my ($editlink,$extresform);
+ my ($editlink,$extresform,$anchor);
my $orig_url = $url;
$orig_url=~s{http(:|:)//https(:|:)//}{https$2//};
$url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/};
@@ -3630,11 +3630,28 @@ END
$url='/adm/wrapper'.$url;
}
if (&Apache::lonnet::symbverify($symb,$url)) {
- $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+ my $shownsymb = $symb;
+ if ($isexternal) {
+ if ($url =~ /^([^#]+)#([^#]+)$/) {
+ $url = $1;
+ $anchor = $2;
+ if ($symb =~ m{^([^#]+)\Q#$anchor\E$}) {
+ $shownsymb = $1.&escape('#').$anchor;
+ }
+ }
+ }
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
} else {
$url='';
}
}
+ } elsif ($supplementalflag) {
+ if ($isexternal) {
+ if ($url =~ /^([^#]+)#([^#]+)$/) {
+ $url = $1;
+ $anchor = $2;
+ }
+ }
}
my ($rand_pick_text,$rand_order_text);
if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') {
@@ -3702,6 +3719,9 @@ $form_end;
if ($isexternal && $orderidx) {
$url .= '&idx='.$orderidx;
}
+ if ($anchor ne '') {
+ $url .= '&anchor='.&HTML::Entities::encode($anchor,'"<>&');
+ }
}
my ($tdalign,$tdwidth);
if ($allowed) {
@@ -3714,13 +3734,17 @@ $form_end;
my ($cfile,$home,$switchserver,$forceedit,$forceview) =
&Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url);
if (($cfile ne '') && ($symb ne '' || $supplementalflag)) {
+ my $suppanchor;
+ if ($supplementalflag) {
+ $suppanchor = $anchor;
+ }
my $jscall =
&Apache::lonhtmlcommon::jump_to_editres($cfile,$home,
$switchserver,
$forceedit,
undef,$symb,
&escape($env{'form.folderpath'}),
- $renametitle,'','',1);
+ $renametitle,'','',1,$suppanchor);
if ($jscall) {
$editlink = ''.&mt('Edit').' '."\n";
@@ -3740,7 +3764,15 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.='';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
+ if ($anchor ne '') {
+ if ($supplementalflag) {
+ $anchor = '&anchor='.&HTML::Entities::encode($anchor,'"<>&');
+ } else {
+ $anchor = '#'.&HTML::Entities::encode($anchor,'"<>&');
+ }
+ }
+ $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?$anchor:''),
'
',600,500);
} else {
$line.='
';
@@ -3749,7 +3781,8 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.=''.$title.'';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
+ $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?$anchor:''),
$title,600,500);
} else {
$line.=$title.' '.$reinit.'';
@@ -4905,7 +4938,39 @@ sub handler {
'webctce4' => 'WebCT 4 Campus Edition',
);
# -----------------------------------------------------------------------------
+ # Calculate free quota space for a user or course.
+ my $quotatype = 'unofficial';
+ if ($crstype eq 'Community') {
+ $quotatype = 'community';
+ } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.coursecode'}) {
+ $quotatype = 'official';
+ } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.textbook'}) {
+ $quotatype = 'textbook';
+ }
+ my $disk_quota = &Apache::loncommon::get_user_quota($coursenum,$coursedom,
+ 'course',$quotatype); # expressed in MB
+ my $current_disk_usage = 0;
+ foreach my $subdir ('docs','supplemental') {
+ $current_disk_usage += &Apache::lonnet::diskusage($coursedom,$coursenum,
+ "userfiles/$subdir",1); # expressed in kB
+ }
+ my $free_space = 1024 * ((1024 * $disk_quota) - $current_disk_usage);
+ my $usage = $current_disk_usage/1024; # in MB
+ my $quota = $disk_quota;
+ my $percent;
+ if ($disk_quota == 0) {
+ $percent = 100.0;
+ } else {
+ $percent = 100*($current_disk_usage/$disk_quota);
+ }
+ $usage = sprintf("%.2f",$usage);
+ $quota = sprintf("%.2f",$quota);
+ $percent = sprintf("%.0f",$percent);
+ my $quotainfo = '
'.&mt('Currently using [_1] of the [_2] available.', + $percent.'%',$quota.' MB').'
'; + my $fileupload=(<