Diff for /loncom/imspackages/imsimportdocs.pm between versions 1.7 and 1.16

version 1.7, 2004/08/05 23:21:49 version 1.16, 2006/03/23 23:17:46
Line 143  sub handler { Line 143  sub handler {
     &Apache::imsprocessor::ims_config(\@areas,\%cmsmap,\%areaname);      &Apache::imsprocessor::ims_config(\@areas,\%cmsmap,\%areaname);
   
 # get course data  # get course data
     my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};      my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
     my $coursehome=$ENV{'course.'.$ENV{'request.course.id'}.'.home'};  
   
 # get personal data  # get personal data
     
     my $uname=$ENV{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$ENV{'user.domain'};      my $udom=$env{'user.domain'};
     my $plainname=&Apache::lonnet::escape(      my $plainname=&Apache::lonnet::escape(
                      &Apache::loncommon::plainname($uname,$udom));                       &Apache::loncommon::plainname($uname,$udom));
   
 # does this user have privileges to post, etc?  # does this user have privileges to post, etc?
     my $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'});      my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
     unless ($allowed) {      unless ($allowed) {
         $r->print("<html><head><title>The LearningOnline Network with CAPA</title></head>");          $r->print(&Apache::loncommon::start_page('Import IMS package',undef,
         $r->print(&Apache::loncommon::bodytag('Import IMS package'));     {'only_body' => 1,}));  
         $r->print('<h3>'.&mt('Modification of Course Contents Disallowed').'</h3>'.&mt('Your current role does not grant you the right to modify course content in this course.').'</body></html>');          $r->print('<h3>'.&mt('Modification of Course Contents Disallowed').'</h3>'.&mt('Your current role does not grant you the right to modify course content in this course.').
     &Apache::loncommon::end_page());
         return OK;          return OK;
     }      }
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
        ['phase']);         ['phase']);
   
     if ($ENV{'form.phase'} eq 'one') {          if ($env{'form.phase'} eq 'one') {    
         &jscript_one(\$javascript);          &jscript_one(\$javascript);
     } elsif ($ENV{'form.phase'} eq 'two') {      } elsif ($env{'form.phase'} eq 'two') {
         &jscript_two(\$javascript);          &jscript_two(\$javascript);
     } elsif ($ENV{'form.phase'} eq 'three') {      } elsif ($env{'form.phase'} eq 'three') {
         &jscript_three(\$javascript);          &jscript_three(\$javascript);
     }      }
   
       $javascript = 
    "<script type=\"text/javascript\">\n".
    "//<!--\n$javascript\n// --></script>\n";
       my $start_page = &Apache::loncommon::start_page('Import IMS package',
       $javascript,
       {'only_body' => 1,});
 # print screen  # print screen
     $r->print(<<ENDHEAD);      $r->print($start_page);
 <html>  
 <head>      if ($env{'form.phase'} eq 'one') {
 <title>The LearningOnline Network with CAPA</title>  
 <script type="text/javascript">  
 <!--  
 $javascript  
 -->  
 </script>  
 </head>  
 ENDHEAD  
 # -------------------------------------------------------------------- Body tag  
     $r->print(&Apache::loncommon::bodytag('Import IMS package'));  
     if ($ENV{'form.phase'} eq 'one') {  
         &display_one($r);                 &display_one($r);       
     } elsif ($ENV{'form.phase'} eq 'two') {      } elsif ($env{'form.phase'} eq 'two') {
         &display_two($r,$coursenum,\@areas,\%areaname,%cmsmap);          &display_two($r,$coursenum,\@areas,\%areaname,%cmsmap);
     } elsif ($ENV{'form.phase'} eq 'three') {      } elsif ($env{'form.phase'} eq 'three') {
         &display_three($r,$coursenum,$coursedom,$coursehome,$uname,$udom,\@areas,%cmsmap);          &display_three($r,$coursenum,$coursedom,$uname,$udom,\@areas,%cmsmap);
     }         }   
     $r->print("</body><html>");      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }   } 
   
Line 231  sub display_one { Line 226  sub display_one {
         <font face='Arial,Helvetica,sans-serif'>          <font face='Arial,Helvetica,sans-serif'>
 Please choose the CMS used to create your IMS content package.&nbsp;&nbsp;  Please choose the CMS used to create your IMS content package.&nbsp;&nbsp;
         <select name="source">          <select name="source">
          <option value='-1' selected="true">Please select           <option value='-1' selected="true">Please select</option>
          <option value='bb5'>Blackboard 5           <option value='bb5'>Blackboard 5</option>
          <option value='bb6'>Blackboard 6           <option value='bb6'>Blackboard 6</option>
          <option value='angel'>ANGEL           <option value='angel'>ANGEL</option>
            <option value='webct4'>WebCT 4</option>
         </select>          </select>
         </font>          </font>
        </td>         </td>
Line 258  Please choose the CMS used to create you Line 254  Please choose the CMS used to create you
       </tr>        </tr>
       <tr>        <tr>
        <td colspan='2'>&nbsp;         <td colspan='2'>&nbsp;
         <input type="hidden" name="folder" value="$ENV{'form.folder'}" />          <input type="hidden" name="folder" value="$env{'form.folder'}" />
         <input type="hidden" name="phase" value="two" />          <input type="hidden" name="phase" value="two" />
         <input type="file" name="uploadname" size="40" />          <input type="file" name="uploadname" size="40" />
        </td>         </td>
Line 278  Please choose the CMS used to create you Line 274  Please choose the CMS used to create you
         <table border='0' cellspacing='0' cellpadding='0' width="100%">          <table border='0' cellspacing='0' cellpadding='0' width="100%">
          <tr>           <tr>
           <td align='left'>            <td align='left'>
            <input type="button" name="exitpage" value="Exit now" onClick="javascript:self.close()">             <input type="button" name="exitpage" value="Exit now" onClick="javascript:self.close()" />
           </td>            </td>
           <td align='right'>            <td align='right'>
            <input type="button" name="nextpage" value="Upload IMS package" onClick="javascript:nextPage()">             <input type="button" name="nextpage" value="Upload IMS package" onClick="javascript:nextPage()" />
           </td>            </td>
          </tr>           </tr>
         </table>          </table>
Line 299  ENDBLOCK Line 295  ENDBLOCK
 sub display_two {  sub display_two {
     my ($r,$crs,$areasref,$areaname,%cmsmap) = @_;      my ($r,$crs,$areasref,$areaname,%cmsmap) = @_;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder','source']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder','source']);
     my $cms = $ENV{'form.source'};      my $cms = $env{'form.source'};
     my $timenow = time;      my $timenow = time;
     my $tempdir = &Apache::imsprocessor::create_tempdir('DOCS',$crs,$timenow);      my $tempdir = &Apache::imsprocessor::create_tempdir('DOCS',$crs,$timenow);
     my $fname = &Apache::imsprocessor::uploadzip('DOCS',$tempdir);      my $fname = &Apache::imsprocessor::uploadzip('DOCS',$tempdir);
Line 309  sub display_two { Line 305  sub display_two {
         $unzip_result = &Apache::imsprocessor::expand_zip($tempdir,$fname);          $unzip_result = &Apache::imsprocessor::expand_zip($tempdir,$fname);
     }      }
     my %resources = ();      my %resources = ();
       my %includedres = ();
       my %includeditems = ();
     my %items = ();      my %items = ();
     my %hrefs = ();      my %hrefs = ();
     my %resinfo = ();      my %resinfo = ();
Line 331  sub display_two { Line 329  sub display_two {
                 );                  );
   
     if ($unzip_result eq 'ok') {      if ($unzip_result eq 'ok') {
         $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo);          $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'choose',\%includedres,\%includeditems);
         if ($manifest_result eq 'ok') {          if ($manifest_result eq 'ok') {
             foreach my $res (sort keys %resources) {              foreach my $res (sort keys %resources) {
                 if ($cms eq 'bb5' || $cms eq 'bb6') {                  if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webct4') {
                     foreach my $area (keys %{$cmsmap{$cms}}) {                      foreach my $area (keys %{$cmsmap{$cms}}) {
                         if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {                          if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {
                             $count{$area} ++;                              $count{$area} ++;
Line 401  ENDBLOCK Line 399  ENDBLOCK
                     if ($area eq 'board') {                      if ($area eq 'board') {
                         $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;                          $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;
                  <select name='db_handling'>                   <select name='db_handling'>
                   <option value='-2'>&lt;-- Check Import first                    <option value='-2'>&lt;-- Check Import first</option>
                  </select></font>                   </select></font>
                 </td>");                  </td>");
                     } elsif ($area eq 'users') {                      } elsif ($area eq 'users') {
                         $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;                          $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;
                  <select name='user_handling'>                   <select name='user_handling'>
                   <option value='-2'>&lt;-- Check Import first                    <option value='-2'>&lt;-- Check Import first</option>
                  </select>                   </select>
                  </font>                           </font>        
                 </td>");                  </td>");
Line 447  ENDBLOCK Line 445  ENDBLOCK
        <td>         <td>
         <table border='0'>          <table border='0'>
          <tr>           <tr>
           <td><font face='arial,helvetica,sans-serif'><input type="radio" name="toplevel" value="newfolder" />Display listing of contents in a new folder, with folder name:&nbsp;&nbsp;&nbsp;<input type="text" name="foldername" size="15" value="Type Name Here" /></font></td>            <td><font face='arial,helvetica,sans-serif'><label><input type="radio" name="toplevel" value="newfolder" />Display listing of contents in a new folder, with folder name:</label>&nbsp;&nbsp;&nbsp;<input type="text" name="foldername" size="15" value="Type Name Here" /></font></td>
          </tr>           </tr>
          <tr>           <tr>
           <td><font face='arial,helvetica,sans-serif'><input type="radio" name="toplevel" value="oldfolder" />Append listing of contents of top level of package to contents list for the current folder.</font></td>            <td><font face='arial,helvetica,sans-serif'><label><input type="radio" name="toplevel" value="oldfolder" />Append listing of contents of top level of package to contents list for the current folder.</label></font></td>
          </tr>           </tr>
         </table>          </table>
        </td>         </td>
Line 464  ENDBLOCK Line 462  ENDBLOCK
       </tr>        </tr>
       <tr>        <tr>
        <td colspan='2'>&nbsp;         <td colspan='2'>&nbsp;
           <input type="hidden" name="folder" value="$ENV{'form.folder'}" />            <input type="hidden" name="folder" value="$env{'form.folder'}" />
           <input type="hidden" name="source" value="$cms" />            <input type="hidden" name="source" value="$cms" />
           <input type="hidden" name="tempdir" value="$tempdir" />            <input type="hidden" name="tempdir" value="$tempdir" />
           <input type="hidden" name="phase" value="three" />            <input type="hidden" name="phase" value="three" />
Line 475  ENDBLOCK Line 473  ENDBLOCK
         <table border='0' cellspacing='0' cellpadding='0' width="100%">          <table border='0' cellspacing='0' cellpadding='0' width="100%">
          <tr>           <tr>
           <td align='left'>            <td align='left'>
            <input type='button' name='exitpage' value='Exit now' onClick="javascript:self.close()">             <input type='button' name='exitpage' value='Exit now' onClick="javascript:self.close()" />
           </td>            </td>
           <td align='right'>            <td align='right'>
            <input type="button" name="nextpage" value="Complete Import" onClick="javascript:nextPage($counter)">             <input type="button" name="nextpage" value="Complete Import" onClick="javascript:nextPage($counter)" />
           </td>            </td>
          </tr>           </tr>
         </table>          </table>
Line 499  ENDDOCUMENT Line 497  ENDDOCUMENT
   
   
 sub display_three {  sub display_three {
     my ($r,$crs,$cdom,$chome,$uname,$udom,$areas,%cmsmap) = @_;      my ($r,$crs,$cdom,$uname,$udom,$areas,%cmsmap) = @_;
     my $folder = $ENV{'form.folder'};      my $folder = $env{'form.folder'};
     my $cms = $ENV{'form.source'};      my $cms = $env{'form.source'};
     my $tempdir = $ENV{'form.tempdir'};      my $tempdir = $env{'form.tempdir'};
     my $longcrs = '';      my $longcrs = '';
     if ($crs =~ m/^(\d)(\d)(\d)/) {      if ($crs =~ m/^(\d)(\d)(\d)/) {
         $longcrs = $1.'/'.$2.'/'.$3.'/'.$crs;          $longcrs = $1.'/'.$2.'/'.$3.'/'.$crs;
     }      }
     my %imports = ();      my %importareas = ();
       my %includedres = ();
       my %includeditems = ();
     my @targets = ();      my @targets = ();
     my %resources = ();      my %resources = ();
     my %items = ();      my %items = ();
Line 536  sub display_three { Line 536  sub display_three {
     my $toplevel = '';      my $toplevel = '';
     my $foldername = '';      my $foldername = '';
     my %topitems = ();      my %topitems = ();
     if (defined($ENV{'form.toplevel'}) ) {      if (defined($env{'form.toplevel'}) ) {
         $toplevel = $ENV{'form.toplevel'};               $toplevel = $env{'form.toplevel'};     
     }      }
     if (defined($ENV{'form.foldername'}) ) {      if (defined($env{'form.foldername'}) ) {
         $foldername = $ENV{'form.foldername'};           $foldername = $env{'form.foldername'}; 
     }      }
    
     foreach my $area (@{$areas}) {      foreach my $area (@{$areas}) {
         if (defined($ENV{"form.$area"}) ) {                    if (defined($env{"form.$area"}) && ($env{'form.'.$area} ne '')) {
             if ($cms eq 'angel' && $area eq 'doc') {              if ($cms eq 'angel' && $area eq 'doc') {
                 foreach (@{$cmsmap{$cms}{$area}}) {                  foreach (@{$cmsmap{$cms}{$area}}) {
                     $imports{$_} = 1;                      $importareas{$_} = 1;
                 }                  }
             } else {              } else {
                 $imports{$cmsmap{$cms}{$area}} = 1;                  $importareas{$cmsmap{$cms}{$area}} = 1;
             }              }
             if ($area eq 'board') {              if ($area eq 'board') {
                 $db_handling = $ENV{'form.db_handling'};                  $db_handling = $env{'form.db_handling'};
             } elsif ($area eq 'users') {              } elsif ($area eq 'users') {
                 $user_handling = $ENV{'form.user_handling'};                  $user_handling = $env{'form.user_handling'};
               }
           }
       }
   
       my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'prepare',\%includedres,\%includeditems);
       if ($manifest_result eq 'ok') {
           foreach my $res (sort keys %resources) {
               if ($importareas{$resources{$res}{type}}) {
                   $includedres{$res} = 1;
             }              }
         }          }
           foreach my $itm (sort keys %items) {
               &Apache::imsprocessor::get_imports(\%includeditems,\%items,\%resources,\%importareas,$itm);
           }
     }      }
          foreach my $itm (sort keys %includeditems) {
     my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo);          &Apache::imsprocessor::get_parents(\%includeditems,\%items,$itm);
       }
   
       $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'build',\%includedres,\%includeditems);
     if ($manifest_result eq 'ok') {      if ($manifest_result eq 'ok') {
   
         my @path = ($cdom,$crs,$timenow);          my @path = ($cdom,$crs,$timenow);
         my $fullpath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles';          my $fullpath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles';
         foreach my $item (@path) {          foreach my $item (@path) {
Line 576  sub display_three { Line 592  sub display_three {
                 mkdir("$fullpath/$name",0770);                  mkdir("$fullpath/$name",0770);
             }              }
         }          }
         &Apache::imsprocessor::target_resources(\%resources,\%imports,\@targets);          &Apache::imsprocessor::target_resources(\%resources,\%importareas,\@targets);
   
         my @boards = ();          my @boards = ();
         my @announcements = ();          my @announcements = ();
         my @quizzes = ();          my @quizzes = ();
         my @surveys = ();          my @surveys = ();
           my @pools = ();
         my @groups = ();          my @groups = ();
         my %messages = ();          my %messages = ();
         my @timestamp = ();          my @timestamp = ();
Line 590  sub display_three { Line 607  sub display_three {
         my @topnames = ();          my @topnames = ();
         my @packages = ();          my @packages = ();
   
         &Apache::imsprocessor::process_resinfo($cms,'DOCS',$tempdir,$destdir,\%items,\%resources,\@boards,\@announcements,\@quizzes,\@surveys,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$seqstem,$seqstem,\@resrcfiles,\@packages,\%hrefs);          &Apache::imsprocessor::process_resinfo($cms,'DOCS',$tempdir,$destdir,\%items,\%resources,\@targets,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$seqstem,$seqstem,\@resrcfiles,\@packages,\%hrefs,\@pages,\@sequences);
   
         my $copy_result = &Apache::imsprocessor::copy_resources('DOCS',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$chome,$destdir,$timenow);          my $copy_result = &Apache::imsprocessor::copy_resources('DOCS',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\%importareas);
   
           &Apache::imsprocessor::build_structure($cms,'DOCS',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,'',$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems);
   
         &Apache::imsprocessor::build_structure($cms,'DOCS',$destdir,\%items,\%resinfo,\%resources,\%hrefs,$udom,$uname,'',$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages);  
    
         foreach my $item (@pages) {          foreach my $item (@pages) {
             my $filename = $timenow.'/pages/'.$item;              my $filename = $timenow.'/pages/'.$item;
             my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$chome,$filename,'');              my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,'');
         }          }
         foreach my $item (@sequences) {          foreach my $item (@sequences) {
             unless ($item eq 'Top.sequence' && $toplevel eq 'oldfolder') {              unless ($item eq 'Top.sequence' && $toplevel eq 'oldfolder') {
                 my $filename = $timenow.'/sequences/'.$item;                  my $filename = $timenow.'/sequences/'.$item;
                 my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$chome,$filename,'');                  my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,'');
             }              }
         }          }
         foreach my $item (@resrcfiles) {          foreach my $item (@resrcfiles) {
             my $filename = $timenow.'/resfiles/'.$item;              my $filename = $timenow.'/resfiles/'.$item;
             my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$chome,$filename,'');              my $fetchresult= &Apache::lonnet::process_coursefile('propagate',$crs,$cdom,$filename,'');
         }          }
   
         my @imports = ();          my @imports = ();
Line 620  sub display_three { Line 637  sub display_three {
             }              }
         } elsif ($toplevel eq 'newfolder') {          } elsif ($toplevel eq 'newfolder') {
             my $url = &Apache::lonnet::unescape("/uploaded/$cdom/$crs/$timenow/sequences/Top.sequence");              my $url = &Apache::lonnet::unescape("/uploaded/$cdom/$crs/$timenow/sequences/Top.sequence");
             my $name = &Apache::lonnet::unescape("$ENV{'form.foldername'}");              my $name = &Apache::lonnet::unescape("$env{'form.foldername'}");
             push @imports, $name, $url;              push @imports, $name, $url;
         }          }
         my $errtext='';          my $errtext='';
Line 630  sub display_three { Line 647  sub display_three {
             $Apache::lonratedt::order[0]=1;              $Apache::lonratedt::order[0]=1;
             $Apache::lonratedt::resources[1]='';              $Apache::lonratedt::resources[1]='';
         }          }
         my ($errtext,$fatal)=&Apache::londocs::group_import($crs, $cdom, $folder,@imports);          my ($errtext,$fatal)=&Apache::londocs::group_import($crs,$cdom,$folder,'sequence','imsimport',@imports);
         if ($fatal) {          if ($fatal) {
             print STDERR "Fatal error during group_import\n";              print STDERR "Fatal error during group_import\n";
         }          }
Line 666  ENDBLOCK Line 683  ENDBLOCK
            <input type="hidden" name="orgurl" value="/adm/coursedocs" />             <input type="hidden" name="orgurl" value="/adm/coursedocs" />
            <input type="hidden" name="selectrole" value="1" />             <input type="hidden" name="selectrole" value="1" />
            <h3><font color="red">Changes will become active for your current session after             <h3><font color="red">Changes will become active for your current session after
            <input type="hidden" name="$ENV{'request.role'}" value="1" />             <input type="hidden" name="$env{'request.role'}" value="1" />
            <input type="button" value="|;             <input type="button" value="|;
     $initblock .= &mt('re-initializing course');      $initblock .= &mt('re-initializing course');
     $initblock .= qq|" onClick="javascript:init(this.form)"/>|;      $initblock .= qq|" onClick="javascript:init(this.form)" />|;
     $initblock .= &mt('or the next time you log in.');      $initblock .= ', '.&mt('or the next time you log in.');
     $initblock .= qq|</font></h3></form>|;        $initblock .= qq|</font></h3></form>|;  
     $r->print($initblock);      $r->print($initblock);
     $r->print(<<ENDBLOCKTWO);      $r->print(<<ENDBLOCKTWO);

Removed from v.1.7  
changed lines
  Added in v.1.16


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