$form_common
+
$lt{'rm'}
$form_end
ENDREM
@@ -3621,7 +3904,9 @@ END
}
} elsif ($url=~m|^/ext/|) {
$url='/adm/wrapper'.$url;
- }
+ } elsif ($url=~m{^/adm/$coursedom/$coursenum/\d+/exttools?$}) {
+ $url='/adm/wrapper'.$url;
+ }
if (&Apache::lonnet::symbverify($symb,$url)) {
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
} else {
@@ -3687,12 +3972,17 @@ $form_common."\n".
$form_end;
}
} elsif ($supplementalflag && !$allowed) {
+ my $isexttool;
+ if ($url=~m{^/adm/$coursedom/$coursenum/\d+/exttools?$}) {
+ $url='/adm/wrapper'.$url;
+ $isexttool = 1;
+ }
$url .= ($url =~ /\?/) ? '&':'?';
$url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"');
if ($title) {
$url .= '&title='.&HTML::Entities::encode($renametitle,'<>&"');
}
- if ($isexternal && $orderidx) {
+ if ((($isexternal) || ($isexttool)) && $orderidx) {
$url .= '&idx='.$orderidx;
}
}
@@ -3703,6 +3993,11 @@ $form_end;
if ($isexternal) {
($editlink,$extresform) =
&Apache::lonextresedit::extedit_form(0,$residx,$orig_url,$title,$pathitem);
+ } elsif ($orig_url =~ m{^/adm/$coursedom/$coursenum/\d+/exttools?$}) {
+ ($editlink,$extresform) =
+ &Apache::lonextresedit::extedit_form(0,$residx,$orig_url,$title,$pathitem,
+ undef,undef,undef,'tool',$coursedom,
+ $coursenum,$ltitoolsref);
} elsif (!$isfolder && !$ispage) {
my ($cfile,$home,$switchserver,$forceedit,$forceview) =
&Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url);
@@ -3801,9 +4096,11 @@ sub action_restrictions {
if ($url=~ m{^/res/.+\.(page|sequence)$}) {
# no copy for published maps
$denied{'copy'} = 1;
- } elsif ($url=~m{^/res/lib/templates/}) {
- $denied{'copy'} = 1;
- $denied{'cut'} = 1;
+ } elsif ($url=~m{^/res/lib/templates/([^/]+)\.problem$}) {
+ unless ($1 eq 'simpleproblem') {
+ $denied{'copy'} = 1;
+ }
+ $denied{'cut'} = 1;
} elsif ($url eq "/uploaded/$cdom/$cnum/group_allfolders.sequence") {
if ($folderpath =~ /^default&[^\&]+$/) {
if ((ref($currgroups) eq 'HASH') && (keys(%{$currgroups}) > 0)) {
@@ -4612,6 +4909,7 @@ sub handler {
my $container;
my $containertag;
my $pathitem;
+ my %ltitools;
# Do we directly jump somewhere?
@@ -4749,11 +5047,13 @@ sub handler {
}
}
my $tabidstr = join("','",@tabids);
- $script .= &editing_js($udom,$uname,$supplementalflag).
+ %ltitools = &Apache::lonnet::get_domain_ltitools($coursedom);
+ my $posslti = keys(%ltitools);
+ $script .= &editing_js($udom,$uname,$supplementalflag,$posslti).
&history_tab_js().
&inject_data_js().
&Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid).
- &Apache::lonextresedit::extedit_javascript();
+ &Apache::lonextresedit::extedit_javascript(\%ltitools);
$addentries = {
onload => "javascript:resize_scrollbox('contentscroll','1','1');",
};
@@ -4871,6 +5171,8 @@ sub handler {
'impo' => 'Import',
'lnks' => 'Import from Stored Links',
'impm' => 'Import from Assembled Map',
+ 'extr' => 'External Resource',
+ 'extt' => 'External Tool',
'selm' => 'Select Map',
'load' => 'Load Map',
'newf' => 'New Folder',
@@ -4906,7 +5208,9 @@ sub handler {
# file size to determine if upload should be allowed.
my $quotatype = 'unofficial';
if ($crstype eq 'Community') {
- $quotatype = 'community';
+ $quotatype = 'community';
+ } elsif ($crstype eq 'Placement') {
+ $quotatype = 'placement';
} elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.coursecode'}) {
$quotatype = 'official';
} elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.textbook'}) {
@@ -4920,8 +5224,22 @@ sub handler {
"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=(<
@@ -5014,6 +5332,11 @@ SEDFFORM
my $extresourcesform =
&Apache::lonextresedit::extedit_form(0,0,undef,undef,$pathitem,
$help{'Adding_External_Resource'});
+ my $exttoolform =
+ &Apache::lonextresedit::extedit_form(0,0,undef,undef,$pathitem,
+ $help{'Adding_External_Tool'},undef,
+ undef,'tool',$coursedom,$coursenum,
+ \%ltitools);
if ($allowed) {
my $folder = $env{'form.folder'};
if ($folder eq '') {
@@ -5191,7 +5514,7 @@ NROSTFORM
$help{'Web_Page'}
NWEBFORM
-
+
my $specialdocumentsform;
my @specialdocumentsforma;
@@ -5259,6 +5582,11 @@ NGFFORM
my @importdoc = (
{'
'=>$extresourcesform}
);
+ if (keys(%ltitools)) {
+ push(@importdoc,
+ {'
'=>$exttoolform},
+ );
+ }
unless ($container eq 'page') {
push(@importdoc,
{'
'=>$imspform}
@@ -5300,7 +5628,7 @@ unless ($container eq 'page') {
$hadchanges=0;
unless (($supplementalflag || $toolsflag)) {
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
- $supplementalflag,\%orderhash,$iconpath,$pathitem);
+ $supplementalflag,\%orderhash,$iconpath,$pathitem,\%ltitools);
if ($error) {
$r->print(''.$error.'
');
}
@@ -5367,6 +5695,12 @@ SNFFORM
&Apache::lonextresedit::extedit_form(1,0,undef,undef,$pathitem,
$help{'Adding_External_Resource'});
+ my $supexttoolform =
+ &Apache::lonextresedit::extedit_form(1,0,undef,undef,$pathitem,
+ $help{'Adding_External_Tool'},
+ undef,undef,'tool',$coursedom,
+ $coursenum,\%ltitools);
+
my $supnewsylform=(<
@@ -5420,10 +5754,16 @@ my @specialdocs = (
);
my @supimportdoc = (
{'
'
- =>$supextform},
- {'
'
+ =>$supextform});
+ if (keys(%ltitools)) {
+ push(@supimportdoc,
+ {'
'
+ =>$supexttoolform});
+ }
+ push(@supimportdoc,
+ {'
'
=>$supupdocform},
- );
+ );
$supupdocform = &create_form_ul(&create_list_elements(@supimportdoc));
my %suporderhash = (
@@ -5433,7 +5773,7 @@ my %suporderhash = (
);
if ($supplementalflag) {
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
- $supplementalflag,\%suporderhash,$iconpath,$pathitem);
+ $supplementalflag,\%suporderhash,$iconpath,$pathitem,\%ltitools);
if ($error) {
$r->print(''.$error.'
');
} else {
@@ -5821,7 +6161,7 @@ END
}
sub editing_js {
- my ($udom,$uname,$supplementalflag) = @_;
+ my ($udom,$uname,$supplementalflag,$posslti) = @_;
my %js_lt = &Apache::lonlocal::texthash(
p_mnf => 'Name of New Folder',
t_mnf => 'New Folder',
@@ -5832,23 +6172,25 @@ sub editing_js {
p_msb => 'Title for the Problem',
p_mdb => 'Title for the Drop Box',
p_mbb => 'Title for the Discussion Board',
- p_mwp => 'Title for Web Page',
+ p_mwp => 'Title for Web Page',
p_mab => "Enter user:domain for User's Personal Information Page",
p_mab2 => 'Personal Information Page of ',
p_mab_alrt1 => 'Not a valid user:domain',
p_mab_alrt2 => 'Please enter both user and domain in the format user:domain',
p_chn => 'New Title',
p_rmr1 => 'WARNING: Removing a resource makes associated grades and scores inaccessible!',
- p_rmr2a => 'Remove[_99]',
- p_rmr2b => '?[_99]',
- p_rmr3a => 'Remove those [_2]',
- p_rmr3b => 'items?[_2]',
+ p_rmr2a => 'Remove',
+ p_rmr2b => '?',
+ p_rmr3a => 'Remove those',
+ p_rmr3b => 'items?',
+ p_rmr4 => 'WARNING: Removing a resource uploaded to a course cannot be undone via "Undo Delete".',
+ p_rmr5 => 'Push "Cancel" and then use "Cut" instead if you might need to undo this change.',
p_ctr1a => 'WARNING: Cutting a resource makes associated grades and scores inaccessible!',
p_ctr1b => 'Grades remain inaccessible if resource is pasted into another folder.',
- p_ctr2a => 'Cut[_98]',
- p_ctr2b => '?[_98]',
- p_ctr3a => 'Cut those[_2]',
- p_ctr3b => 'items?[_2]',
+ p_ctr2a => 'Cut',
+ p_ctr2b => '?',
+ p_ctr3a => 'Cut those',
+ p_ctr3b => 'items?',
rpck => 'Enter number to pick (e.g., 3)',
imsfile => 'You must choose an IMS package for import',
imscms => 'You must select which Course Management System was the source of the IMS package',
@@ -5896,11 +6238,17 @@ sub editing_js {
}
my $fieldsets = "'ext','doc'";
+ if ($posslti) {
+ $fieldsets .= ",'tool'";
+ }
unless ($main_container_page) {
$fieldsets .=",'ims'";
}
if ($supplementalflag) {
$fieldsets = "'suppext','suppdoc'";
+ if ($posslti) {
+ $fieldsets .= ",'supptool'";
+ }
}
return < 0) {
- if ((cutwarnings > 0) || (remwarnings > 0)) {
+ if ((cutwarnings > 0) || (remwarnings > 0) || (removalinfo > 0)) {
if (remwarnings > 0) {
if (!confirm('$js_lt{"p_rmr1"}\\n\\n$js_lt{"p_rmr3a"} '+remwarnings+' $js_lt{"p_rmr3b"}')) {
return false;
}
}
+ if (removalinfo > 0) {
+ if (!confirm('$js_lt{"p_rmr4"}\\n$js_lt{"p_rmr5"}\\n\\n$js_lt{"p_rmr3a"} '+removalinfo+' $js_lt{"p_rmr3b"}')) {
+ return false;
+ }
+ }
if (cutwarnings > 0) {
if (!confirm('$js_lt{"p_ctr1a"}\\n$js_lt{"p_ctr1b"}\\n\\n$js_lt{"p_ctr3a"} '+cutwarnings+' $js_lt{"p_ctr3b"}')) {
return false;