version 1.1142, 2013/07/22 20:50:01
|
version 1.1150, 2013/08/20 14:33:42
|
Line 8044 function expand_div(caller) {
|
Line 8044 function expand_div(caller) {
|
} |
} |
|
|
sub simple_error_page { |
sub simple_error_page { |
my ($r,$title,$msg) = @_; |
my ($r,$title,$msg,$args) = @_; |
|
if (!$args->{'no_auto_mt_msg'}) { $msg = &mt($msg); } |
|
|
my $page = |
my $page = |
&Apache::loncommon::start_page($title). |
&Apache::loncommon::start_page($title). |
'<p class="LC_error">'.&mt($msg).'</p>'. |
'<p class="LC_error">'.$msg.'</p>'. |
&Apache::loncommon::end_page(); |
&Apache::loncommon::end_page(); |
if (ref($r)) { |
if (ref($r)) { |
$r->print($page); |
$r->print($page); |
Line 8884 sub default_quota {
|
Line 8886 sub default_quota {
|
|
|
Returns warning message if upload of file to authoring space, or copying |
Returns warning message if upload of file to authoring space, or copying |
of existing file within authoring space will cause quota for the authoring |
of existing file within authoring space will cause quota for the authoring |
space to be exceeded, |
space to be exceeded. |
|
|
Same, if upload of a file directly to a course/community via Course Editor |
Same, if upload of a file directly to a course/community via Course Editor |
will cause quota for uploaded content for the course to be exceeded. |
will cause quota for uploaded content for the course to be exceeded. |
Line 9861 sub ask_for_embedded_content {
|
Line 9863 sub ask_for_embedded_content {
|
$embed_file = $file; |
$embed_file = $file; |
} |
} |
my $absolutepath; |
my $absolutepath; |
if ($embed_file =~ m{^\w+://}) { |
my $cleaned_file = &clean_path($embed_file); |
$newfiles{$embed_file} = 1; |
if ($cleaned_file =~ m{^\w+://}) { |
$mapping{$embed_file} = $embed_file; |
$newfiles{$cleaned_file} = 1; |
|
$mapping{$cleaned_file} = $embed_file; |
} else { |
} else { |
if ($embed_file =~ m{^/}) { |
if ($embed_file =~ m{^/}) { |
$absolutepath = $embed_file; |
$absolutepath = $embed_file; |
$embed_file =~ s{^(/+)}{}; |
|
} |
} |
if ($embed_file =~ m{/}) { |
if ($cleaned_file =~ m{/}) { |
my ($path,$fname) = ($embed_file =~ m{^(.+)/([^/]*)$}); |
my ($path,$fname) = ($cleaned_file =~ m{^(.+)/([^/]*)$}); |
$path = &check_for_traversal($path,$url,$toplevel); |
$path = &check_for_traversal($path,$url,$toplevel); |
my $item = $fname; |
my $item = $fname; |
if ($path ne '') { |
if ($path ne '') { |
Line 9887 sub ask_for_embedded_content {
|
Line 9889 sub ask_for_embedded_content {
|
} else { |
} else { |
$dependencies{$embed_file} = 1; |
$dependencies{$embed_file} = 1; |
if ($absolutepath) { |
if ($absolutepath) { |
$mapping{$embed_file} = $absolutepath; |
$mapping{$cleaned_file} = $absolutepath; |
} else { |
} else { |
$mapping{$embed_file} = $embed_file; |
$mapping{$cleaned_file} = $embed_file; |
} |
} |
} |
} |
} |
} |
Line 10263 sub ask_for_embedded_content {
|
Line 10265 sub ask_for_embedded_content {
|
return ($output,$counter,$numpathchg); |
return ($output,$counter,$numpathchg); |
} |
} |
|
|
|
=pod |
|
|
|
=item * clean_path($name) |
|
|
|
Performs clean-up of directories, subdirectories and filename in an |
|
embedded object, referenced in an HTML file which is being uploaded |
|
to a course or portfolio, where |
|
"Upload embedded images/multimedia files if HTML file" checkbox was |
|
checked. |
|
|
|
Clean-up is similar to replacements in lonnet::clean_filename() |
|
except each / between sub-directory and next level is preserved. |
|
|
|
=cut |
|
|
|
sub clean_path { |
|
my ($embed_file) = @_; |
|
$embed_file =~s{^/+}{}; |
|
my @contents; |
|
if ($embed_file =~ m{/}) { |
|
@contents = split(/\//,$embed_file); |
|
} else { |
|
@contents = ($embed_file); |
|
} |
|
my $lastidx = scalar(@contents)-1; |
|
for (my $i=0; $i<=$lastidx; $i++) { |
|
$contents[$i]=~s{\\}{/}g; |
|
$contents[$i]=~s/\s+/\_/g; |
|
$contents[$i]=~s{[^/\w\.\-]}{}g; |
|
if ($i == $lastidx) { |
|
$contents[$i]=~s/\.(\d+)(?=\.)/_$1/g; |
|
} |
|
} |
|
if ($lastidx > 0) { |
|
return join('/',@contents); |
|
} else { |
|
return $contents[0]; |
|
} |
|
} |
|
|
sub embedded_file_element { |
sub embedded_file_element { |
my ($context,$num,$embed_file,$mapping,$allfiles,$codebase,$type) = @_; |
my ($context,$num,$embed_file,$mapping,$allfiles,$codebase,$type) = @_; |
return unless ((ref($mapping) eq 'HASH') && (ref($allfiles) eq 'HASH') && |
return unless ((ref($mapping) eq 'HASH') && (ref($allfiles) eq 'HASH') && |
Line 10651 sub modify_html_refs {
|
Line 10693 sub modify_html_refs {
|
my $numchg = ($content =~ s{($attrib_regexp\s*=\s*['"]?)\Q$ref\E(['"]?)}{$1$newname$2}gi); |
my $numchg = ($content =~ s{($attrib_regexp\s*=\s*['"]?)\Q$ref\E(['"]?)}{$1$newname$2}gi); |
$count += $numchg; |
$count += $numchg; |
$allfiles{$newname} = $allfiles{$ref}; |
$allfiles{$newname} = $allfiles{$ref}; |
|
delete($allfiles{$ref}); |
} |
} |
if ($env{'form.embedded_codebase_'.$i} ne '') { |
if ($env{'form.embedded_codebase_'.$i} ne '') { |
$codebase = &unescape($env{'form.embedded_codebase_'.$i}); |
$codebase = &unescape($env{'form.embedded_codebase_'.$i}); |
Line 12121 sub get_turnedin_filepath {
|
Line 12164 sub get_turnedin_filepath {
|
my $title = $res->compTitle(); |
my $title = $res->compTitle(); |
$title =~ s/\W+/_/g; |
$title =~ s/\W+/_/g; |
if ($title ne '') { |
if ($title ne '') { |
|
if (($pc > 1) && (length($title) > 12)) { |
|
$title = substr($title,0,12); |
|
} |
push(@pathitems,$title); |
push(@pathitems,$title); |
} |
} |
} |
} |
Line 12129 sub get_turnedin_filepath {
|
Line 12175 sub get_turnedin_filepath {
|
my $maptitle = $mapres->compTitle(); |
my $maptitle = $mapres->compTitle(); |
$maptitle =~ s/\W+/_/g; |
$maptitle =~ s/\W+/_/g; |
if ($maptitle ne '') { |
if ($maptitle ne '') { |
|
if (length($maptitle) > 12) { |
|
$maptitle = substr($maptitle,0,12); |
|
} |
push(@pathitems,$maptitle); |
push(@pathitems,$maptitle); |
} |
} |
unless ($env{'request.state'} eq 'construct') { |
unless ($env{'request.state'} eq 'construct') { |
Line 12169 sub get_turnedin_filepath {
|
Line 12218 sub get_turnedin_filepath {
|
$restitle = time; |
$restitle = time; |
} |
} |
} |
} |
|
if (length($restitle) > 12) { |
|
$restitle = substr($restitle,0,12); |
|
} |
push(@pathitems,$restitle); |
push(@pathitems,$restitle); |
$path .= join('/',@pathitems); |
$path .= join('/',@pathitems); |
} |
} |
Line 13106 sub restore_settings {
|
Line 13158 sub restore_settings {
|
|
|
=item * &build_recipient_list() |
=item * &build_recipient_list() |
|
|
Build recipient lists for five types of e-mail: |
Build recipient lists for following types of e-mail: |
(a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors |
(a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors |
(d) Help requests, (e) Course requests needing approval, generated by |
(d) Help requests, (e) Course requests needing approval, (f) loncapa |
lonerrorhandler.pm, CHECKRPMS, loncron, lonsupportreq.pm and |
module change checking, student/employee ID conflict checks, as |
loncoursequeueadmin.pm respectively. |
generated by lonerrorhandler.pm, CHECKRPMS, loncron, |
|
lonsupportreq.pm, loncoursequeueadmin.pm, searchcat.pl respectively. |
|
|
Inputs: |
Inputs: |
defmail (scalar - email address of default recipient), |
defmail (scalar - email address of default recipient), |
mailing type (scalar - errormail, packagesmail, or helpdeskmail), |
mailing type (scalar: errormail, packagesmail, helpdeskmail, |
|
requestsmail, updatesmail, or idconflictsmail). |
|
|
defdom (domain for which to retrieve configuration settings), |
defdom (domain for which to retrieve configuration settings), |
|
|
origmail (scalar - email address of recipient from loncapa.conf, |
origmail (scalar - email address of recipient from loncapa.conf, |
i.e., predates configuration by DC via domainprefs.pm |
i.e., predates configuration by DC via domainprefs.pm |
|
|
Line 13493 sub assign_category_rows {
|
Line 13549 sub assign_category_rows {
|
if (ref($cats->[$depth]{$parent}) eq 'ARRAY') { |
if (ref($cats->[$depth]{$parent}) eq 'ARRAY') { |
my $numchildren = @{$cats->[$depth]{$parent}}; |
my $numchildren = @{$cats->[$depth]{$parent}}; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
$text .= '<td><table class="LC_datatable">'; |
$text .= '<td><table class="LC_data_table">'; |
for (my $j=0; $j<$numchildren; $j++) { |
for (my $j=0; $j<$numchildren; $j++) { |
$name = $cats->[$depth]{$parent}[$j]; |
$name = $cats->[$depth]{$parent}[$j]; |
$item = &escape($name).':'.&escape($parent).':'.$depth; |
$item = &escape($name).':'.&escape($parent).':'.$depth; |
Line 14576 sub parse_supplemental_title {
|
Line 14632 sub parse_supplemental_title {
|
return $title; |
return $title; |
} |
} |
|
|
|
sub recurse_supplemental { |
|
my ($cnum,$cdom,$suppmap,$numfiles,$errors) = @_; |
|
if ($suppmap) { |
|
my ($errtext,$fatal) = &LONCAPA::map::mapread('/uploaded/'.$cdom.'/'.$cnum.'/'.$suppmap); |
|
if ($fatal) { |
|
$errors ++; |
|
} else { |
|
if ($#LONCAPA::map::resources > 0) { |
|
foreach my $res (@LONCAPA::map::resources) { |
|
my ($title,$src,$ext,$type,$status)=split(/\:/,$res); |
|
if (($src ne '') && ($status eq 'res')) { |
|
if ($src =~ m{^\Q/uploaded/$cdom/$cnum/\E(supplemental_\d+\.sequence)$}) { |
|
($numfiles,$errors) = &recurse_supplemental($cnum,$cdom,$1,$numfiles,$errors); |
|
} else { |
|
$numfiles ++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return ($numfiles,$errors); |
|
} |
|
|
sub symb_to_docspath { |
sub symb_to_docspath { |
my ($symb) = @_; |
my ($symb) = @_; |
return unless ($symb); |
return unless ($symb); |
Line 14605 sub symb_to_docspath {
|
Line 14685 sub symb_to_docspath {
|
my $thistitle = $res->title(); |
my $thistitle = $res->title(); |
$path .= '&'. |
$path .= '&'. |
&Apache::lonhtmlcommon::entity_encode($thisurl).'&'. |
&Apache::lonhtmlcommon::entity_encode($thisurl).'&'. |
&Apache::lonhtmlcommon::entity_encode($thistitle). |
&escape($thistitle). |
':'.$res->randompick(). |
':'.$res->randompick(). |
':'.$res->randomout(). |
':'.$res->randomout(). |
':'.$res->encrypted(). |
':'.$res->encrypted(). |
Line 14621 sub symb_to_docspath {
|
Line 14701 sub symb_to_docspath {
|
} |
} |
$path .= (($path ne '')? '&' : ''). |
$path .= (($path ne '')? '&' : ''). |
&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
&Apache::lonhtmlcommon::entity_encode($maptitle). |
&escape($maptitle). |
':'.$mapresobj->randompick(). |
':'.$mapresobj->randompick(). |
':'.$mapresobj->randomout(). |
':'.$mapresobj->randomout(). |
':'.$mapresobj->encrypted(). |
':'.$mapresobj->encrypted(). |
Line 14634 sub symb_to_docspath {
|
Line 14714 sub symb_to_docspath {
|
$maptitle = 'Main Content'; |
$maptitle = 'Main Content'; |
} |
} |
$path = &Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
$path = &Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
&Apache::lonhtmlcommon::entity_encode($maptitle).':::::'.$ispage; |
&escape($maptitle).':::::'.$ispage; |
} |
} |
unless ($mapurl eq 'default') { |
unless ($mapurl eq 'default') { |
$path = 'default&'. |
$path = 'default&'. |
&Apache::lonhtmlcommon::entity_encode('Main Content'). |
&escape('Main Content'). |
':::::&'.$path; |
':::::&'.$path; |
} |
} |
return $path; |
return $path; |