[LON-CAPA-cvs] cvs: loncom /interface londocs.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Sun, 22 Aug 2004 18:15:54 -0000


This is a MIME encoded message

--raeburn1093198554
Content-Type: text/plain

raeburn		Sun Aug 22 14:15:54 2004 EDT

  Modified files:              
    /loncom/interface	londocs.pm 
  Log:
  Start of interface for course export to IMS
  
  
--raeburn1093198554
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20040822141554.txt"

Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.137 loncom/interface/londocs.pm:1.138
--- loncom/interface/londocs.pm:1.137	Tue Aug 17 15:02:57 2004
+++ loncom/interface/londocs.pm	Sun Aug 22 14:15:54 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.137 2004/08/17 19:02:57 albertel Exp $
+# $Id: londocs.pm,v 1.138 2004/08/22 18:15:54 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -36,6 +36,7 @@
 use Apache::lonratsrv;
 use Apache::lonxml;
 use Apache::loncreatecourse;
+use Apache::lonnavmaps;
 use HTML::Entities;
 use GDBM_File;
 use Apache::lonlocal;
@@ -236,6 +237,202 @@
     }
 }
 
+# ------------------------------------------------------ Generate "export" button
+
+sub exportbutton {
+    return '</td><td bgcolor="#DDDDCC">'.
+            '<input type="submit" name="exportcourse" value="'.
+            &mt('Export Course to IMS').'" />'.
+            &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
+}
+
+sub exportcourse {
+    my $r=shift;
+    my %discussiontime = &Apache::lonnet::dump('discussiontimes',
+                                               $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+    my $numdisc = keys %discussiontime;
+    my $navmap = Apache::lonnavmaps::navmap->new();
+    my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
+    my $curRes;
+
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['finishexport']);
+    if ($ENV{'form.finishexport'}) {
+        &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['archive','discussion']);
+
+        my @exportitems = ();
+        if (defined($ENV{'form.archive'})) {
+            if (ref($ENV{'form.archive'}) eq 'ARRAY') {
+                @exportitems = @{$ENV{'form.archive'}};
+            } else {
+                $exportitems[0] = $ENV{'form.archive'};
+            }
+        }
+        my @discussions = ();
+        if (defined($ENV{'form.discussion'})) {
+            if (ref($ENV{'form.discussion'}) eq 'ARRAY') {
+                @discussions = $ENV{'form.discussion'};
+            } else {
+                $discussions[0] = $ENV{'form.discussion'};
+            }
+        }
+        my $curRes;
+        my $count;
+        my %symbs;
+        my $display;
+        while ($curRes = $it->next()) {
+            if (ref($curRes)) {
+                $count ++;
+                $symbs{$count} = $curRes->symb();
+                if (grep/^$count$/,@exportitems) {
+                    $display.= 'Export content item '.$curRes->title()."<br />\n";
+                }
+                if (grep/^$count$/,@discussions) {
+                    $display.= 'Export discussion posts '.$curRes->title()."<br />\n";
+                }  
+            }
+        }
+
+        $r->print('<html><head><title>Export Course</title></head>'.
+            &Apache::loncommon::bodytag('Export course to IMS or SCORM content package'
+));
+
+        my $exportfile;
+        $r->print($display);
+        $r->print('</body></html>');
+    } else {
+        my $display;
+        $display = '<form name="exportdoc" method="post">'."\n";
+        $display .= 'Choose which items you wish to export from your course.<br /><br />';
+        $display .= '<table border="0" cellspacing="0" cellpadding="3">'.
+                    '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.
+                    '<input type="button" value="check all" '.
+                    'onclick="javascript:checkAll(document.exportdoc.archive)" />'.
+                    '&nbsp;&nbsp;<input type="button" value="uncheck all"'.
+                    ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset></td>'.
+                    '<td>&nbsp;</td><td>&nbsp;</td>'.
+                    '<td align="right"><fieldset><legend>&nbsp;<b>Discussion posts'.
+                    '</b></legend><input type="button" value="check all"'.
+                    ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
+                    '&nbsp;&nbsp;<input type="button" value="uncheck all"'.
+                    ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" /></fieldset></td>'.
+                    '</tr></table>';
+        my $curRes;
+        my $depth = 0;
+        my $count = 0;
+        my $boards = 0;
+        my $startcount = 5;
+        my %parent = ();
+        my %children = ();
+        my $lastcontainer = $startcount;
+        my @bgcolors = ('#F6F6F6','#FFFFFF');
+        $display .= '<table cellspacing="0"><tr>'.
+            '<td><b>Export content item?<br /></b></td><td>&nbsp;</td><td align="right">'."\n";
+        if ($numdisc > 0) {
+            $display.='<b>Export&nbsp;discussion posts?</b>'."\n";
+        }
+        $display.='&nbsp;</td></tr>';
+        while ($curRes = $it->next()) {
+            if (ref($curRes)) {
+                $count ++;
+            }
+            if ($curRes == $it->BEGIN_MAP()) {
+                $depth++;
+                $parent{$depth} = $lastcontainer;
+            }
+            if ($curRes == $it->END_MAP()) {
+                $depth--;
+                $lastcontainer = $parent{$depth};
+            }
+            if (ref($curRes)) {
+                my $symb = $curRes->symb();
+                my $color = $count%2;
+                $display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n".
+                    '<input type="checkbox" name="archive" value="'.$count.'" ';
+                if (($curRes->is_sequence()) || ($curRes->is_page())) {
+                    my $checkitem = $count + $boards + $startcount;
+                    $display .= 'onClick="javascript:propagateCheck('."'$checkitem'".')"';
+                }
+                $display .= ' />'."\n";
+                for (my $i=0; $i<$depth; $i++) {
+                    $display .= '<img src="/adm/lonIcons/whitespace1.gif" width="25" height="1" alt="" border="0" /><img src="/adm/lonIcons/whitespace1.gif" width="25" height="1" alt="" border="0" />'."\n";
+                }
+                if ($curRes->is_sequence()) {
+                    $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif">&nbsp;'."\n";
+                    $lastcontainer = $count + $startcount + $boards;
+                } elsif ($curRes->is_page()) {
+                    $display .= '<img src="/adm/lonIcons/navmap.page.open.gif">&nbsp;'."\n";
+                    $lastcontainer = $count + $startcount + $boards;
+                }
+                my $currelem = $count+$boards+$startcount;
+                $children{$parent{$depth}} .= $currelem.':';
+                $display .= '&nbsp;'.$curRes->title().'</td>';
+                if ($discussiontime{$symb} > 0) {
+                    $boards ++;
+                    $currelem = $count+$boards+$startcount;
+                    $display .= '<td>&nbsp;</td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" />&nbsp;</td>'."\n";
+                } else {
+                    $display .= '<td colspan="2">&nbsp;</td>'."\n";
+                }
+            }
+        }
+        my $scripttag = qq|
+<script>
+
+function checkAll(field) {
+    for (i = 0; i < field.length; i++)
+        field[i].checked = true ;
+}
+
+function uncheckAll(field) {
+    for (i = 0; i < field.length; i++)
+        field[i].checked = false ;
+}
+
+function propagateCheck(item) {
+    if (document.exportdoc.elements[item].checked == true) {
+        containerCheck(item)
+    }
+} 
+
+function containerCheck(item) {
+    document.exportdoc.elements[item].checked = true
+    var numitems = $count + $boards + $startcount
+    var parents = new Array(numitems)
+    for (var i=$startcount; i<numitems; i++) {
+        parents[i] = new Array
+    }
+        |;
+
+        foreach my $container (sort { $a <=> $b } keys %children) {
+            my @contents = split/:/,$children{$container};
+            for (my $i=0; $i<@contents; $i ++) {
+                $scripttag .= '    parents['.$container.']['.$i.'] = '.$contents[$i]."\n";
+            }
+        }
+
+        $scripttag .= qq|
+    if (parents[item].length > 0) {
+        for (var j=0; j<parents[item].length; j++) {
+            containerCheck(parents[item][j])
+        }
+     }   
+}
+
+</script>
+        |;
+        $r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'.
+            &Apache::loncommon::bodytag('Export course to IMS or SCORM content package'
+));
+
+        $r->print($display.'</table>'.
+                  '<p><input type="hidden" name="finishexport" value="1">'.
+                  '<input type="submit" name="exportcourse" value="'.
+                  &mt('Export Course DOCS').'" /></p></form></body></html>');
+    }
+}
+
 
 # Imports the given (name, url) resources into the course
 # coursenum, coursedom, and folder must precede the list
@@ -1089,6 +1286,8 @@
       &checkversions($r);
   } elsif ($ENV{'form.dumpcourse'}) {
       &dumpcourse($r);
+  } elsif ($ENV{'form.exportcourse'}) {
+      &exportcourse($r);
   } else {
 # is this a standard course?
 
@@ -1293,6 +1492,7 @@
 # -----------------------------------------------------------------------------
     if ($allowed) {
        my $dumpbut=&dumpbutton();
+       my $exportbut=&exportbutton();
        my %lt=&Apache::lonlocal::texthash(
 					 'vc' => 'Verify Content',
 					 'cv' => 'Check/Set Resource Versions',
@@ -1323,6 +1523,7 @@
 </td><td bgcolor="#DDDDCC">
     <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}
 $dumpbut
+$exportbut
 </td></tr></table>
 </form>
 ENDCOURSEVERIFY

--raeburn1093198554--