[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