[LON-CAPA-cvs] cvs: loncom /interface lonsyllabus.pm
raeburn
raeburn at source.lon-capa.org
Sat Aug 31 14:58:57 EDT 2013
raeburn Sat Aug 31 18:58:57 2013 EDT
Modified files:
/loncom/interface lonsyllabus.pm
Log:
- More comprehensive user environment update when saving a syllabus type
that is different from current one.
- New routine: update_access_permissions() deletes portfolio file access
permissions when deleting minimal or uploaded syllabus, or switching syllabus
from one of those types to either standard template or external URL
- New routine: default_minimal_syllabus() creates the default "minimal template"
file i.e., a basic HTML page stored in portfolio/syllabus/loncapa.html
- Store an existing loncapa.html as loncapa.html.bak if deleting "minimal template".
- Load existing "minimal template" if one created (and not deleted in the past),
and now switching back to minimal from some other syllabus type.
-------------- next part --------------
Index: loncom/interface/lonsyllabus.pm
diff -u loncom/interface/lonsyllabus.pm:1.130 loncom/interface/lonsyllabus.pm:1.131
--- loncom/interface/lonsyllabus.pm:1.130 Tue Aug 27 03:00:38 2013
+++ loncom/interface/lonsyllabus.pm Sat Aug 31 18:58:57 2013
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Syllabus
#
-# $Id: lonsyllabus.pm,v 1.130 2013/08/27 03:00:38 raeburn Exp $
+# $Id: lonsyllabus.pm,v 1.131 2013/08/31 18:58:57 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1081,13 +1081,18 @@
sub save_changes {
my ($cnum,$cdom,$uploaded,$external,$minimal,$syllabus,$syllabusfields,$courseenv) = @_;
my ($earlyout,$output);
- unless ((ref($syllabus) eq 'HASH') && (ref($syllabusfields) eq 'HASH')) {
+ unless ((ref($syllabus) eq 'HASH') && (ref($syllabusfields) eq 'HASH') ||
+ (ref($courseenv) eq 'HASH')) {
return ($earlyout,$uploaded,$external,$minimal,$output);
}
if (($env{'form.deleteuploaded_file'}) || ($env{'form.deleteuploaded_minimal'})) {
my %storehash;
if (($env{'form.choice'} eq 'file') &&
($env{'form.deleteuploaded_file'}) && ($uploaded =~ /\w/)) {
+ if ($courseenv->{'uploadedsyllabus'} =~ m{^\Q/uploaded/$cdom/$cnum/portfolio\E(/syllabus/.+)$}) {
+ my $filename = $1;
+ &update_access_permissions($cdom,$cnum,$filename);
+ }
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.uploadedsyllabus');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.externalsyllabus');
$storehash{'uploadedsyllabus'} = '';
@@ -1097,6 +1102,17 @@
undef($external);
} elsif (($env{'form.choice'} eq 'minimal') &&
($env{'form.deleteuploaded_minimal'}) && ($minimal =~ /\w/)) {
+ my $minimalurl = "/uploaded/$cdom/$cnum/portfolio/syllabus/loncapa.html";
+ if ($courseenv->{'minimalsyllabus'} eq "$minimalurl") {
+ my $filecontents=&Apache::lonnet::getfile(&Apache::lonnet::filelocation("",$minimalurl));
+ unless ($filecontents eq -1) {
+ $env{'form.output'} = $filecontents;
+ &Apache::lonnet::finishuserfileupload($cnum,$cdom,'output',
+ 'portfolio/syllabus/loncapa.html.bak');
+ $minimalurl = &default_minimal_syllabus($cnum,$cdom);
+ }
+ }
+ &update_access_permissions($cdom,$cnum,'/syllabus/loncapa.html');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.externalsyllabus');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.minimalsyllabus');
$storehash{'externalsyllabus'} = '';
@@ -1255,29 +1271,11 @@
'</div>';
}
} elsif ($env{'form.choice'} eq 'minimal') {
- my $title = $env{'form.syllabustitle'};
- $title =~ s{`}{}g;
- $title=~s/^\s+//;
- $title=~s/\s+$//;
- if ($title eq '') {
- $title = &mt('Syllabus');
+ $url = "/uploaded/$cdom/$cnum/portfolio/syllabus/loncapa.html";
+ my $filecontents=&Apache::lonnet::getfile(&Apache::lonnet::filelocation("",$url));
+ if ($filecontents eq -1) {
+ $url = &default_minimal_syllabus($cnum,$cdom);
}
- my $initialtext = &mt('Replace with your own content.');
- my $newhtml = <<END;
-<html>
-<head>
-<title>$title</title>
-</head>
-<body bgcolor="#ffffff">
-<h2>$title</h2>
-$initialtext
-</body>
-</html>
-END
- $env{'form.output'}=$newhtml;
- $url =
- &Apache::lonnet::finishuserfileupload($cnum,$cdom,'output',
- 'portfolio/syllabus/loncapa.html');
}
if ($url =~ m{^/uploaded/\Q$cdom\E/\Q$cnum\E.*/[^/]+$}) {
my $exturl = &home_http_host($cdom,$cnum);
@@ -1366,19 +1364,48 @@
return ($earlyout,$uploaded,$external,$minimal,$output);
}
+sub default_minimal_syllabus {
+ my ($cnum,$cdom) = @_;
+ my $title;
+ if ($env{'form.syllabustitle'}) {
+ $title = $env{'form.syllabustitle'};
+ $title =~ s{`}{}g;
+ $title=~s/^\s+//;
+ $title=~s/\s+$//;
+ }
+ if ($title eq '') {
+ $title = &mt('Syllabus');
+ }
+ my $initialtext = &mt('Replace with your own content.');
+ my $newhtml = <<END;
+<html>
+<head>
+<title>$title</title>
+</head>
+<body bgcolor="#ffffff">
+<h2>$title</h2>
+$initialtext
+</body>
+</html>
+END
+ $env{'form.output'}=$newhtml;
+ return &Apache::lonnet::finishuserfileupload($cnum,$cdom,'output',
+ 'portfolio/syllabus/loncapa.html');
+}
+
sub update_syllabus_env {
my ($cdom,$cnum,$courseenv,$saved,$uploaded,$minimal,$external) = @_;
return ($uploaded,$minimal,$external) unless(ref($courseenv) eq 'HASH');
my $now = time;
my (@envkeys,%storehash);
if ($saved eq 'template') {
- if ($uploaded) {
+ if ($uploaded || $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) {
push(@envkeys,'uploaded');
}
- if ($minimal) {
+ if ($minimal || $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}) {
push(@envkeys,'minimal');
}
- if ($external) {
+ if ($external || $env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) {
push(@envkeys,'external');
}
$storehash{'updatedsyllabus'} = $now;
@@ -1389,26 +1416,26 @@
if ($external =~ m{^\Q$prefix/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) {
my $file = $1;
if ($file eq 'loncapa.html') {
- if ($uploaded) {
+ if ($uploaded || $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) {
push(@envkeys,'uploaded');
}
- } elsif ($minimal) {
+ } elsif ($minimal || $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}) {
push(@envkeys,'minimal');
}
} else {
- if ($uploaded) {
+ if ($uploaded || $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) {
push(@envkeys,'uploaded');
}
- if ($minimal) {
+ if ($minimal || $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}) {
push(@envkeys,'minimal');
}
}
} elsif ($saved eq 'file') {
- if ($minimal) {
+ if ($minimal || $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}) {
push(@envkeys,'minimal');
}
} elsif ($saved eq 'minimal') {
- if ($uploaded) {
+ if ($uploaded || $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) {
push(@envkeys,'uploaded');
}
}
@@ -1417,7 +1444,17 @@
my $key = $item.'syllabus';
if ($courseenv->{$key} ne '') {
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.'.$key);
+ if ($item eq 'minimal') {
+ &update_access_permissions($cdom,$cnum,'/syllabus/loncapa.html');
+ } elsif ($item eq 'uploaded') {
+ if ($courseenv->{$key} =~ m{^\Q/uploaded/$cdom/$cnum/portfolio\E(/syllabus/.+)$}) {
+ my $filename = $1;
+ &update_access_permissions($cdom,$cnum,$filename);
+ }
+ }
$storehash{$key} = '';
+ } elsif ($env{'course.'.$env{'request.course.id'}.'.'.$key} ne '') {
+ &Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.'.$key);
}
if ($item eq 'uploaded') {
undef($uploaded);
@@ -1436,6 +1473,25 @@
return ($uploaded,$minimal,$external);
}
+sub update_access_permissions {
+ my ($cdom,$cnum,$file_name) = @_;
+ my $current_permissions = &Apache::lonnet::get_portfile_permissions($cdom,$cnum);
+ my %access_controls =
+ &Apache::lonnet::get_access_controls($current_permissions,'',$file_name);
+ if (keys(%access_controls) > 0) {
+ my %changes;
+ foreach my $key (keys(%{$access_controls{$file_name}})) {
+ $changes{'delete'}{$key} = 1;
+ }
+ if (keys(%changes) > 0) {
+ my ($outcome,$deloutcome,$new_values,$translation) =
+ &Apache::lonnet::modify_access_controls($file_name,\%changes,
+ $cdom,$cnum);
+ }
+ }
+ return;
+}
+
sub home_http_host {
my ($cdom,$cnum) = @_;
my $home=&Apache::lonnet::homeserver($cnum,$cdom);
More information about the LON-CAPA-cvs
mailing list