Diff for /loncom/interface/londocs.pm between versions 1.135 and 1.141

version 1.135, 2004/07/08 19:58:29 version 1.141, 2004/09/09 18:56:01
Line 36  use Apache::lonratedt; Line 36  use Apache::lonratedt;
 use Apache::lonratsrv;  use Apache::lonratsrv;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::loncreatecourse;  use Apache::loncreatecourse;
   use Apache::lonnavmaps;
 use HTML::Entities;  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
Line 236  sub dumpcourse { Line 237  sub dumpcourse {
     }      }
 }  }
   
   # ------------------------------------------------------ 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  # Imports the given (name, url) resources into the course
 # coursenum, coursedom, and folder must precede the list  # coursenum, coursedom, and folder must precede the list
Line 281  sub breadcrumbs { Line 478  sub breadcrumbs {
                 
       
     }      }
     return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef,0);      return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef,
          0,'nohelp');
 }  }
   
 sub editor {  sub editor {
Line 635  END Line 833  END
  $line.=(<<ENDPARMS);   $line.=(<<ENDPARMS);
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <input type="checkbox" name="hidprs_$orderidx" $hidtext/> $lt{'hd'}</td>  <input type="checkbox" name="hidprs_$orderidx" $hidtext/> $lt{'hd'}</td>
 <td bgcolor="#BBBBFF"><font size='-2'>  <!--<td bgcolor="#BBBBFF"><font size='-2'>
 <input type="checkbox" name="encprs_$orderidx" $enctext/> $lt{'ec'}</td>  <input type="checkbox" name="encprs_$orderidx" $enctext/> $lt{'ec'}</td>-->
 <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>  <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <input type="submit" value="$lt{'sp'}" />  <input type="submit" value="$lt{'sp'}" />
Line 650  ENDPARMS Line 848  ENDPARMS
 # ---------------------------------------------------------------- tie the hash  # ---------------------------------------------------------------- tie the hash
   
 sub tiehash {  sub tiehash {
       my ($mode)=@_;
     $hashtied=0;      $hashtied=0;
     if ($ENV{'request.course.fn'}) {      if ($ENV{'request.course.fn'}) {
         if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",   if ($mode eq 'write') {
             &GDBM_READER(),0640)) {      if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
       &GDBM_WRCREAT(),0640)) {
                   $hashtied=2;
       }
    } else {
       if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
       &GDBM_READER(),0640)) {
                 $hashtied=1;                  $hashtied=1;
         }      }
    }
     }          }    
 }  }
   
Line 668  sub untiehash { Line 874  sub untiehash {
   
 sub checkonthis {  sub checkonthis {
     my ($r,$url,$level,$title)=@_;      my ($r,$url,$level,$title)=@_;
       $url=&Apache::lonnet::unescape($url);
     $alreadyseen{$url}=1;      $alreadyseen{$url}=1;
     $r->rflush();      $r->rflush();
     if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {      if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
Line 754  sub verifycontent { Line 961  sub verifycontent {
    %alreadyseen=();     %alreadyseen=();
    &tiehash();     &tiehash();
    foreach (keys %hash) {     foreach (keys %hash) {
        if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) {         if ($hash{$_}=~/\.(page|sequence)$/) {
      if (($_=~/^src_/) && ($alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {
          $r->print('<hr /><font color="red">'.
    &mt('The following sequence or page is included more than once in your course: ').
    &Apache::lonnet::unescape($hash{$_}).'</font><br />'.
    &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));
      }
          }
          if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {
            &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});             &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
        }         }
    }     }
Line 821  sub checkversions { Line 1036  sub checkversions {
  } else {   } else {
     $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>');      $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>');
  }   }
  &changewarning($r,'');   &mark_hash_old();
     }      }
       &changewarning($r,'');
     if ($ENV{'form.timerange'} eq 'all') {      if ($ENV{'form.timerange'} eq 'all') {
 # show all documents  # show all documents
  $header=&mt('All Documents in Course');   $header=&mt('All Documents in Course');
Line 942  ENDHEADERS Line 1158  ENDHEADERS
 # Set version  # Set version
     $r->print(&Apache::loncommon::select_form($setversions{$linkurl},      $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
       'set_version_'.$linkurl,        'set_version_'.$linkurl,
       ('' => '',        ('select_form_order' =>
          ['',1..$currentversion,'mostrecent'],
          '' => '',
        'mostrecent' => 'most recent',         'mostrecent' => 'most recent',
        map {$_,$_} (1..$currentversion))));         map {$_,$_} (1..$currentversion))));
     $r->print('</nobr></td></tr><tr><td></td>');      $r->print('</nobr></td></tr><tr><td></td>');
Line 1003  ENDHEADERS Line 1221  ENDHEADERS
     &untiehash();      &untiehash();
 }  }
   
   sub mark_hash_old {
       my $retie_hash=0;
       if ($hashtied) {
    $retie_hash=1;
    &untiehash();
       }
       &tiehash('write');
       $hash{'old'}=1;
       &untiehash();
       if ($retie_hash) { &tiehash(); }
   }
   
   sub is_hash_old {
       my $untie_hash=0;
       if (!$hashtied) {
    $untie_hash=1;
    &tiehash();
       }
       my $return=$hash{'old'};
       if ($untie_hash) { &untiehash(); }
       return $return;
   }
   
 sub changewarning {  sub changewarning {
     my ($r,$postexec)=@_;      my ($r,$postexec)=@_;
       if (!&is_hash_old()) { return; }
     $r->print(      $r->print(
 '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'.   '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. 
 '<form method="post" action="/adm/roles" target="loncapaclient">'.  '<form method="post" action="/adm/roles" target="loncapaclient">'.
Line 1053  sub handler { Line 1295  sub handler {
       &checkversions($r);        &checkversions($r);
   } elsif ($ENV{'form.dumpcourse'}) {    } elsif ($ENV{'form.dumpcourse'}) {
       &dumpcourse($r);        &dumpcourse($r);
     } elsif ($ENV{'form.exportcourse'}) {
         &exportcourse($r);
   } else {    } else {
 # is this a standard course?  # is this a standard course?
   
Line 1257  ENDNEWSCRIPT Line 1501  ENDNEWSCRIPT
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
     if ($allowed) {      if ($allowed) {
        my $dumpbut=&dumpbutton();         my $dumpbut=&dumpbutton();
          my $exportbut=&exportbutton();
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
  'vc' => 'Verify Content',   'vc' => 'Verify Content',
  'cv' => 'Check/Set Resource Versions',   'cv' => 'Check/Set Resource Versions',
Line 1287  ENDNEWSCRIPT Line 1532  ENDNEWSCRIPT
 </td><td bgcolor="#DDDDCC">  </td><td bgcolor="#DDDDCC">
     <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}      <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}
 $dumpbut  $dumpbut
   $exportbut
 </td></tr></table>  </td></tr></table>
 </form>  </form>
 ENDCOURSEVERIFY  ENDCOURSEVERIFY
Line 1313  ENDCOURSEVERIFY Line 1559  ENDCOURSEVERIFY
        $hadchanges=0;         $hadchanges=0;
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($hadchanges) {         if ($hadchanges) {
    &changewarning($r,$postexec);     &mark_hash_old()
        }         }
          &changewarning($r,$postexec);
        my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.         my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                      '.sequence';                       '.sequence';
        $r->print(<<ENDFORM);         $r->print(<<ENDFORM);
Line 1540  ENDSUPFORM Line 1787  ENDSUPFORM
     $r->print('</table>');      $r->print('</table>');
   } else {    } else {
 # -------------------------------------------------------- This is showdoc mode  # -------------------------------------------------------- This is showdoc mode
       $r->print("<h1>".&mt('Uploaded Document').'</h1><p>'.        $r->print("<h1>".&mt('Uploaded Document').' - '.
    &Apache::lonnet::gettitle($r->uri).'</h1><p>'.
 &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>".  &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>".
          &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');           &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');
   }    }

Removed from v.1.135  
changed lines
  Added in v.1.141


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>