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

version 1.7, 2004/08/05 23:21:49 version 1.32, 2013/09/30 17:42:12
Line 1 Line 1
   # The LearningOnline Network with CAPA
   #
   # $Id$
   #
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
 # This file is part of the LearningOnline Network with CAPA (LON-CAPA).  # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
Line 29  use Apache::londocs; Line 33  use Apache::londocs;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::imsprocessor;  use Apache::imsprocessor;
 use LONCAPA::Configuration;  use LONCAPA::map();
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
    
 use strict;  use strict;
   
 sub jscript_one {  sub jscript_one {
     my $javascript = shift;      my %lt = &Apache::lonlocal::texthash(
     $$javascript = qq#                 se => 'Select',
 function verify() {                 to => 'Import topics only',
  if ((document.forms.pickcms.uploadname.value == '')  || (!document.forms.pickcms.uploadname.value)) {                 tp => 'Import topics + posts (with author)',
    alert("You must provide the name of the IMS package to be imported")                 tn => 'Import topics + posts (no author)',
    return false                 es => 'Enroll students only',
  }                 ea => 'Enroll all users',
  if (document.forms.pickcms.source.selectedIndex == 0) {                 nr => 'Not required',
    alert("You must choose the Course Management System from which the IMS package was exported");                 id => 'You must select one of the additional options when importing Discussion Boards.',
    return false                 ie => 'You must select one of the additional options when importing Enrollment.',
  }                 ct => 'You must check at least one Content Type.', 
  return true      );
 }      return <<"ENDJS";
   
 function nextPage() {  
  if (verify()) {  
    document.forms.pickcms.submit()  
  }  
 }  
 #;  
    
 }  
   
 sub jscript_two {  
     my $javascript = shift;  
     $$javascript = qq#  
 function setOptions(caller,itemnum) {  function setOptions(caller,itemnum) {
   var opForm = document.forms.pickoptions    var opForm = document.forms.pickoptions
   var menu = 1 + itemnum*2    var menu = 1 + itemnum*2
   opForm.elements[menu].length = 0    opForm.elements[menu].length = 0
   if (opForm.elements[itemnum*2].checked == true) {    if (opForm.elements[itemnum*2].checked == true) {
     if (caller == "board") {      if (caller == "board") {
       opForm.elements[menu].options[0] = new Option("Select","-1",true,true)        opForm.elements[menu].options[0] = new Option("$lt{'se'}","-1",true,true)
       opForm.elements[menu].options[1] = new Option("Import topics only","topics",true,true)        opForm.elements[menu].options[1] = new Option("$lt{'to'}","topics",true,true)
       opForm.elements[menu].options[2] = new Option("Import topics + posts (with author)","allpost",true,true)        opForm.elements[menu].options[2] = new Option("$lt{'tp'}","allpost",true,true)
       opForm.elements[menu].options[3] = new Option("Import topics + posts (no author)","allanon",true,true)        opForm.elements[menu].options[3] = new Option("$lt{'tn'}","allanon",true,true)
     }      }
     else {       else { 
       if (caller == "users") {        if (caller == "users") {
         opForm.elements[menu].length = 0          opForm.elements[menu].length = 0
         opForm.elements[menu].options[0] = new Option("Select","-1",true,true)          opForm.elements[menu].options[0] = new Option("$lt{'se'}","-1",true,true)
         opForm.elements[menu].options[1] = new Option("Enroll students only","students",true,true)          opForm.elements[menu].options[1] = new Option("$lt{'es'}","students",true,true)
         opForm.elements[menu].options[2] = new Option("Enroll all users","all",true,true)          opForm.elements[menu].options[2] = new Option("$lt{'ea'}","all",true,true)
       }        }
     }      }
   }    }
   else {    else {
     opForm.elements[menu].options[0] = new Option("Not required","0",true,true)      opForm.elements[menu].options[0] = new Option("$lt{'nr'}","0",true,true)
   }    }
   opForm.elements[menu].selectedIndex = 0    opForm.elements[menu].selectedIndex = 0
 }  }
Line 93  function verify(caller) { Line 87  function verify(caller) {
       totcheck ++        totcheck ++
       if (opForm.elements[2*i].name == "board") {         if (opForm.elements[2*i].name == "board") { 
         if (opForm.elements[2*i+1].selectedIndex == 0) {               if (opForm.elements[2*i+1].selectedIndex == 0) {     
           alert("You must select one of the additional options when importing Discussion Boards ")            alert("$lt{'id'}")
           return false            return false
         }          }
       }        }
       if (opForm.elements[2*i].name == "users") {        if (opForm.elements[2*i].name == "users") {
         if (opForm.elements[2*i+1].selectedIndex == 0) {               if (opForm.elements[2*i+1].selectedIndex == 0) {     
           alert("You must select one of the additional options when importing Enrollment")            alert("$lt{'ie'}")
           return false            return false
         }          }
       }        }
     }      }
   }    }
   if (totcheck == 0) {    if (totcheck == 0) {
     alert("You must check the Checkbox for at least one Content Type");      alert("$lt{'ct'}");
     return false      return false
   }    }
   return true    return true
Line 117  function nextPage(caller) { Line 111  function nextPage(caller) {
    document.forms.pickoptions.submit()     document.forms.pickoptions.submit()
  }   }
 }  }
 #;  
   ENDJS
   
 }  }
   
 sub jscript_three {  sub jscript_two {
     my $javascript = shift;      return <<"ENDJS";
     $$javascript = qq|  
 function init(tf) {  function init(tf) {
     setTimeout("self.close()",3000)      setTimeout("self.close()",3000)
     tf.submit();         tf.submit();   
 }  }
     |;   
   ENDJS
 }  }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     my $javascript = '';  
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
Line 143  sub handler { Line 138  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=&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(
               '<p class="LC_error">'
              .&mt('Modification of Course Contents Disallowed')
              .'</p><p>'
              .&mt('Your current role does not grant you the right to modify course content in this course.')
              .'</p>'
              .&Apache::loncommon::end_page()
           );
         return OK;          return OK;
     }      }
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      my $javascript;
        ['phase']);      if ($env{'form.phase'} eq 'one') {
           $javascript = &jscript_one();
     if ($ENV{'form.phase'} eq 'one') {          } elsif ($env{'form.phase'} eq 'two') {
         &jscript_one(\$javascript);          $javascript = &jscript_two();
     } elsif ($ENV{'form.phase'} eq 'two') {  
         &jscript_two(\$javascript);  
     } elsif ($ENV{'form.phase'} eq 'three') {  
         &jscript_three(\$javascript);  
     }      }
   
       $javascript = 
           "<script type=\"text/javascript\">\n".
           "//<!--\n$javascript\n// --></script>\n";
       my $headline = 'Import IMS package';
       my $start_page = &Apache::loncommon::start_page($headline,
                                                       $javascript,
                                                       {'only_body' => 1,})
                       .'<h1>'.&mt($headline).'</h1>';
 # 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>          &display_one($r,$coursenum,\@areas,\%areaname,%cmsmap);
 <script type="text/javascript">      } elsif ($env{'form.phase'} eq 'two') {
 <!--          &display_two($r,$coursenum,$coursedom,$uname,$udom,\@areas,%cmsmap);
 $javascript  
 -->  
 </script>  
 </head>  
 ENDHEAD  
 # -------------------------------------------------------------------- Body tag  
     $r->print(&Apache::loncommon::bodytag('Import IMS package'));  
     if ($ENV{'form.phase'} eq 'one') {  
         &display_one($r);         
     } elsif ($ENV{'form.phase'} eq 'two') {  
         &display_two($r,$coursenum,\@areas,\%areaname,%cmsmap);  
     } elsif ($ENV{'form.phase'} eq 'three') {  
         &display_three($r,$coursenum,$coursedom,$coursehome,$uname,$udom,\@areas,%cmsmap);  
     }         }   
     $r->print("</body><html>");      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }   
   
   
 sub display_one {  
     my ($r) = @_;  
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folder']);  
   
     $r->print(<<ENDBLOCK);  
 <form action="/adm/imsimportdocs" method="post" enctype="multipart/form-data" name="pickcms">  
   <table border='0' bgcolor='#F6F6F6' cellspacing='0' cellpadding ='0' width='100%'>  
    <tr>  
     <td colspan='2'>  
      <table border='0' cellspacing='0' cellpadding='0'>  
       <tr>  
         <td colspan='2'  align='left'>&nbsp;  
         </td>  
        </tr>  
        <tr bgcolor='#CCCCFF'>  
         <td valign='middle'><img src='/res/adm/pages/bl_step1.gif'>&nbsp;  
         </td>  
         <td width='100%' align='left'>&nbsp;&nbsp;  
          <font face='arial,helvetica,sans-serif'><b>Specify the Course Management system used to create the package.</b>&nbsp;&nbsp;  
          </font>  
        </td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr>  
        <td>&nbsp;</td>  
        <td>  
         <font face='Arial,Helvetica,sans-serif'>  
 Please choose the CMS used to create your IMS content package.&nbsp;&nbsp;  
         <select name="source">  
          <option value='-1' selected="true">Please select  
          <option value='bb5'>Blackboard 5  
          <option value='bb6'>Blackboard 6  
          <option value='angel'>ANGEL  
         </select>  
         </font>  
        </td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr bgcolor='#CCCCFF'>  
         <td valign='middle'><img src='/res/adm/pages/bl_step2.gif'>&nbsp;  
         </td>  
         <td width='100%' align='left'>&nbsp;&nbsp;  
          <font face='arial,helvetica,sans-serif'><b>Locate the IMS content package you wish to upload.</b>&nbsp;&nbsp;  
          </font>  
        </td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;  
         <input type="hidden" name="folder" value="$ENV{'form.folder'}" />  
         <input type="hidden" name="phase" value="two" />  
         <input type="file" name="uploadname" size="40" />  
        </td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr>  
        <td>&nbsp;</td>  
        <td><font face='arial,helvetica,sans-serif'>If you have selected the CMS, and located the IMS package, you should click the 'Upload IMS package' button to upload the file to the server.</font></td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr  
        <td colspan='2'>  
         <table border='0' cellspacing='0' cellpadding='0' width="100%">  
          <tr>  
           <td align='left'>  
            <input type="button" name="exitpage" value="Exit now" onClick="javascript:self.close()">  
           </td>  
           <td align='right'>  
            <input type="button" name="nextpage" value="Upload IMS package" onClick="javascript:nextPage()">  
           </td>  
          </tr>  
         </table>  
        </td>  
       </tr>  
      </table>  
     </td>  
    </tr>  
   </table>  
 </form>  
 ENDBLOCK  
 }  }
   
   sub display_one {
 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']);      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 203  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 = ();
     my %count = ();      my %count = ();
     my @bgcolors = ("#eeeeee","#dddddd");  
   
     my $counter = 0;      my $counter = 0;
     my $iter = 0;  
     my %count = (      my %count = (
                 announce => 0,                  announce => 0,
                 board => 0,                  board => 0,
Line 330  sub display_two { Line 223  sub display_two {
                 users => 0,                  users => 0,
                 );                  );
   
     if ($unzip_result eq 'ok') {      if ($unzip_result ne 'ok') {
         $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo);          $r->print(
         if ($manifest_result eq 'ok') {              &Apache::loncommon::confirmwrapper(
             foreach my $res (sort keys %resources) {                  &Apache::lonhtmlcommon::confirm_success(
                 if ($cms eq 'bb5' || $cms eq 'bb6') {                      &mt('Processing of your IMS package failed because the file you'
                     foreach my $area (keys %{$cmsmap{$cms}}) {                         .' uploaded could not be unzipped.'),1)
                         if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {             .'<br />'.&mt('Error: [_1]',$unzip_result))
                             $count{$area} ++;          );
                         }          return();
                     }      }
                 } elsif ($cms eq 'angel') {  
                     foreach my $area (keys %{$cmsmap{$cms}}) {      # Get manifest file from package
                         if ($area eq 'doc') {      $manifest_result = &Apache::imsprocessor::process_manifest(
                             if (grep/^$resources{$res}{type}$/,@{$cmsmap{$cms}{doc}}) {                             $cms,$tempdir,\%resources,\%items,\%hrefs,
                                 $count{$area} ++;                             \%resinfo,'choose',\%includedres,\%includeditems);
                             }      if ($manifest_result ne 'ok') {
                         } elsif ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {          $r->print(
                             $count{$area} ++;              '<br />'.&Apache::loncommon::confirmwrapper(
                         }                  &Apache::lonhtmlcommon::confirm_success(
                     }                      &mt('Unpacking of your IMS package failed because an IMS manifest file'
                          .' was not located in the package.'),1))
           );
           return();
       }
   
       # Count areas depending on cms version
       foreach my $res (sort keys %resources) {
           if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webctce4') {
               foreach my $area (keys %{$cmsmap{$cms}}) {
                   if ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {
                       $count{$area} ++;
                 }                  }
             }              }
             $r->print(<<ENDBLOCK);          } elsif ($cms eq 'angel5') {
 <form name="pickoptions" method="post">              foreach my $area (keys %{$cmsmap{$cms}}) {
   <table border='0' bgcolor='#F6F6F6'' cellspacing='0' cellpadding ='0' width='100%'>                  if ($area eq 'doc') {
    <tr>                      if (grep/^$resources{$res}{type}$/,@{$cmsmap{$cms}{doc}}) {
     <td colspan='2'>                          $count{$area} ++;
      <table border='0' cellspacing='0' cellpadding='0'>  
       <tr>  
        <td colspan='2'  align='left'>&nbsp;  
        </td>  
       </tr>  
       <tr bgcolor='#CCCCFF'>  
        <td valign='middle'><img src='/res/adm/pages/bl_step3.gif'>  
        </td>  
        <td width='100%' align='left'>&nbsp;&nbsp;  
         <font face='arial,helvetica,sans-serif'><b>Choose which content types you wish to import</b></font>  
        </td>  
       </tr>  
       <tr>  
        <td colspan='2'>&nbsp;</td>  
       </tr>  
       <tr>  
        <td>&nbsp;</td>  
        <td>  
         <table border='0' cellspacing='0' cellpadding='1' bgcolor='#000000'>  
          <tr>  
           <td>  
            <table border='0' cellspacing='0' cellpadding='0' bgcolor='#ffffff' width='100%'>  
             <tr>  
              <td>  
               <table border='0' cellspacing='1' cellpadding='1' bgcolor='#ffffff' width='100%'>  
                <tr bgcolor='#CCCCFF'>  
                 <td align='center'><font face='arial,helvetica,sans-serif'><b>Import?</b></font></td>             
                 <td align='center'><font face='arial,helvetica,sans-serif'><b>Content type</b></font></td>  
                 <td align='center'><font face='arial,helvetica,sans-serif'><b>Additional options</b></font></td>  
                </tr>  
 ENDBLOCK  
             foreach my $area (@{$areasref}) {  
                 if ($count{$area} > 0) {  
                     my $count_tag = 'flag_'.$counter;  
                     $r->print("               <tr bgcolor='@bgcolors[$iter]'>  
                 <td align='left'><font face='arial,helvetica,sans-serif'><input name='$area' type='checkbox' ");  
                     if ($area eq 'board' || $area eq 'users') {  
                         $r->print(qq|onClick='javascript:setOptions("$area","$counter")'|);  
                     }  
                     $r->print("/></font></td>  
                 <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;$$areaname{$area}&nbsp;&nbsp; - $count{$area} item(s)</font></td>");  
                     if ($area eq 'board') {  
                         $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;  
                  <select name='db_handling'>  
                   <option value='-2'>&lt;-- Check Import first  
                  </select></font>  
                 </td>");  
                     } elsif ($area eq 'users') {  
                         $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;  
                  <select name='user_handling'>  
                   <option value='-2'>&lt;-- Check Import first  
                  </select>  
                  </font>          
                 </td>");  
                     } else {  
                         $r->print("            <td align='left'><font face='arial,helvetica,sans-serif'>&nbsp;&nbsp;None<input type='hidden' name='$count_tag' /></font></td>");  
                     }                      }
                     $counter ++;                  } elsif ($resources{$res}{type} eq $cmsmap{$cms}{$area}) {
                     $iter = $counter%2;                      $count{$area} ++;
                 }                  }
             }              }
             $r->print(<<ENDDOCUMENT);          } else { # Unknown cms format
                </tr>              $r->print(
               </table>                  '<span class="LC_warning">'
              </td>                 .&mt('Unsupported IMS format: [_1]',$cms)
             </tr>                 .'</span><br />'
            </table>              );
           </td>              # return();
          </tr>          }
         </table>      }
        </td>  
       </tr>  
       <tr>      # Start output: Step 1 and step 2
        <td colspan='2'>&nbsp;<br /><br /></td>  
       </tr>      $r->print(
       <tr bgcolor='#CCCCFF'>          '<form name="pickoptions" method="post" action="">'
        <td valign='middle'><img src='/res/adm/pages/bl_step4.gif'>         .&Apache::lonhtmlcommon::topic_bar(
        </td>              1,&mt('Choose which content types you wish to import'))
        <td width='100%' align='left'>&nbsp;&nbsp;         .'<p>'
         <font face='arial,helvetica,sans-serif'><b>Choose display options for listing of contents of top level of package.</b></font>         .&mt('Check the checkboxes for all areas you wish to import from the IMS package:')
        </td>         .'</p>'
       </tr>      );
       <tr>  
        <td colspan='2'>&nbsp;</td>      $r->print(
       </tr>          &Apache::loncommon::start_data_table()
       <tr>         .&Apache::loncommon::start_data_table_header_row()
        <td>&nbsp;</td>         .'<th>'.&mt('Import?').'</th>'
        <td>         .'<th>'.&mt('Content type').'</th>'
         <table border='0'>         .'<th>'.&mt('Additional options').'</th>'
          <tr>         .&Apache::loncommon::end_data_table_header_row()
           <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>      );
          </tr>  
          <tr>      # Display import row for each area/content type
           <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>      foreach my $area (@{$areasref}) {
          </tr>          unless ($count{$area} > 0) { next };
         </table>  
        </td>          my $count_tag = 'flag_'.$counter;
       </tr>  
       <tr>          # Checkbox: Import?
        <td colspan='2'>&nbsp;</td>          $r->print(
       </tr>              &Apache::loncommon::start_data_table_row()
       <tr>             .'<td><input name="'.$area.'" type="checkbox"'
        <td>&nbsp;</td>          );
        <td><font face='arial,helvetica,sans-serif'>Once you have checked the checkboxes for all areas you wish to import from the IMS package, selected options (if available), and selected a display option for the package contents you should click the 'Complete Import' button.</font></td>          if ($area eq 'board' || $area eq 'users') {
       </tr>              $r->print(qq| onclick='javascript:setOptions("$area","$counter")'|);
       <tr>          }
        <td colspan='2'>&nbsp;  
           <input type="hidden" name="folder" value="$ENV{'form.folder'}" />          $r->print(' /></td>');
           <input type="hidden" name="source" value="$cms" />  
           <input type="hidden" name="tempdir" value="$tempdir" />          # Content Type
           <input type="hidden" name="phase" value="three" />          $r->print(
        </td>              '<td>'
       </tr>             .$$areaname{$area}.'&nbsp;&nbsp; - '
       <tr>             .&mt('[quant,_1,item]',$count{$area})
        <td colspan='2'>             .'</td>'
         <table border='0' cellspacing='0' cellpadding='0' width="100%">          );
          <tr>  
           <td align='left'>          # Additional Options
            <input type='button' name='exitpage' value='Exit now' onClick="javascript:self.close()">          $r->print('<td>');
           </td>          if ($area eq 'board') {
           <td align='right'>              $r->print(
            <input type="button" name="nextpage" value="Complete Import" onClick="javascript:nextPage($counter)">                  '<select name="db_handling">'
           </td>                 .'<option value="-2">&lt;-- '.&mt('Check Import first').'</option>'
          </tr>                 .'</select>'
         </table>              );
        </td>          } elsif ($area eq 'users') {
       </tr>              $r->print(
      </table>                  '<select name="user_handling">'
     </td>                 .'<option value="-2">&lt;-- '.&mt('Check Import first').'</option>'
    </tr>                 .'</select>'
   </table>              );
 ENDDOCUMENT  
         } else {          } else {
             $r->print("Unpacking of your IMS package failed because an IMS manifest file was not located in the package\n");              $r->print(
         }                  &mt('None')
     } else {                 .'<input type="hidden" name="'.$count_tag.'" />'
         $r->print("Processing of your IMS package failed because the file you uploaded could not be unzipped\n");              );
     }          }
 }          $r->print('</td>');
   
           $r->print(&Apache::loncommon::end_data_table_row());
           $counter ++;
       }
   
       $r->print(&Apache::loncommon::end_data_table());
   
       $r->print(
           &Apache::lonhtmlcommon::topic_bar(
               2,&mt('Choose display options for listing of contents of top level of package'))
          .'<p>'
          .&mt('Select a display option for the package content:')
          .'</p>'
       );
       $r->print(
           '<label>'
          .'<input type="radio" name="toplevel" value="newfolder" />'
          .&mt('Display listing of contents in a new folder, with folder name:')
          .'</label>'
          .' <input type="text" name="foldername" size="15" value="'.&mt('Type Name Here').'" />'
          .'<br />'
          .'<label>'
          .'<input type="radio" name="toplevel" value="oldfolder" checked="checked" />'
          .&mt('Append listing of contents of top level of package to contents list for the current folder.')
          .'</label>'
       );
   
       # Buttons
       $r->print(
           '<input type="hidden" name="folder" value="'.$env{'form.folder'}.'" />'
          .'<input type="hidden" name="source" value="'.$cms.'" />'
          .'<input type="hidden" name="tempdir" value="'.$tempdir.'" />'
          .'<input type="hidden" name="phase" value="two" />'
       );
       $r->print(
           '<hr />'
          .'<p>'
          .'<input type="button" name="exitpage" value="'.&mt('Cancel').'"'
          .' onclick="javascript:self.close()" />'
          .' '
          .'<input type="button" name="nextpage" value="'.&mt('Finish Import').'"'
          .' onclick="javascript:nextPage('.$counter.')" />'
          .'</p>'
       );
   
      $r->print('</form>');
   }
   
 sub display_three {  sub display_two {
     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 431  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 'angel5' && $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);      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) {
           &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 487  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 502  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,\%resources,$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 = ();
         if ($toplevel eq 'oldfolder') {          if ($toplevel eq 'oldfolder') {
             for (my $i=0; $i<@topurls; $i++) {              for (my $i=0; $i<@topurls; $i++) {
                 my $url = &Apache::lonnet::unescape($topurls[$i]);                  my $url = &unescape($topurls[$i]);
                 my $name = &Apache::lonnet::unescape($topnames[$i]);                  my $name = &unescape($topnames[$i]);
                 push @imports, $name, $url;                  push(@imports, [$name, $url]);
             }              }
         } elsif ($toplevel eq 'newfolder') {          } elsif ($toplevel eq 'newfolder') {
             my $url = &Apache::lonnet::unescape("/uploaded/$cdom/$crs/$timenow/sequences/Top.sequence");              my $url = &unescape("/uploaded/$cdom/$crs/$timenow/sequences/Top.sequence");
             my $name = &Apache::lonnet::unescape("$ENV{'form.foldername'}");              my $name = &unescape("$env{'form.foldername'}");
             push @imports, $name, $url;              push(@imports, [$name, $url]);
         }          }
         my $errtext='';          my $errtext='';
         my $fatal=0;          my $fatal=0;
         ($errtext,$fatal)=  &Apache::londocs::mapread($crs,$cdom,$folder.'.sequence');          ($errtext,$fatal)=  &Apache::londocs::mapread($crs,$cdom,$folder.'.sequence');
         if ($#Apache::lonratedt::order<1) {          if ($#LONCAPA::map::order<1) {
             $Apache::lonratedt::order[0]=1;              $LONCAPA::map::order[0]=1;
             $Apache::lonratedt::resources[1]='';              $LONCAPA::map::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";              &Apache::lonnet::logthis("Fatal error during group_import.");
         }          }
     }      }
     if ($tempdir =~ m/^\/home\/httpd\/perl\/tmp\/$crs\/\d{10}/) {      if ($tempdir =~ m/^\/home\/httpd\/perl\/tmp\/$crs\/\d{10}/) {
         system("rm -r -f $tempdir");          system("rm -r -f $tempdir");
     }      }
     $r->print(<<ENDBLOCK);  
   <table border='0' bgcolor='#F6F6F6'' cellspacing='0' cellpadding ='0' width='100%'>      # All done, display success message
    <tr>      $r->print(
     <td colspan='2'>          '<p class="LC_success">'
      <table border='0' cellspacing='0' cellpadding='0'>         .&mt('Your import is complete.')
       <tr>         .'</p>'
        <td colspan='2'  align='left'>&nbsp;      );
        </td>      # Re-initialize Button
       </tr>      my $initbutton =
       <tr bgcolor='#CCCCFF'>             '<input type="button" value="'
        <td valign='middle'><img src='/res/adm/pages/bl_step5.gif'>            .&mt('re-initializing course')
        </td>            .'" onclick="javascript:init(this.form)" />';
        <td width='100%' align='left'>&nbsp;&nbsp;      $r->print(
         <font face='arial,helvetica,sans-serif'><b>Your import is complete</b></font>          '<form method="post" action="/adm/roles" target="loncapaclient" name="importDone">'
        </td>         .'<input type="hidden" name="orgurl" value="/adm/coursedocs" />'
       </tr>         .'<input type="hidden" name="selectrole" value="1" />'
       <tr>         .'<input type="hidden" name="'.$env{'request.role'}.'" value="1" />'
        <td colspan='2'>&nbsp;</td>         .'<p class="LC_warning">'
       </tr>         .&mt('Changes will become active for your current session after [_1]'
       <tr>             .', or the next time you log in.'
        <td>&nbsp;</td>              ,$initbutton)
        <td>         .'</p>'
 ENDBLOCK         .'</form>'
     my $initblock = qq|        );
          <form method="post" action="/adm/roles" target="loncapaclient" name="importDone">  
            <input type="hidden" name="orgurl" value="/adm/coursedocs" />  
            <input type="hidden" name="selectrole" value="1" />  
            <h3><font color="red">Changes will become active for your current session after  
            <input type="hidden" name="$ENV{'request.role'}" value="1" />  
            <input type="button" value="|;  
     $initblock .= &mt('re-initializing course');  
     $initblock .= qq|" onClick="javascript:init(this.form)"/>|;  
     $initblock .= &mt('or the next time you log in.');  
     $initblock .= qq|</font></h3></form>|;    
     $r->print($initblock);  
     $r->print(<<ENDBLOCKTWO);  
      </table>  
     </td>  
    </tr>  
   </table>  
 ENDBLOCKTWO  
 }  }
   
 1;  1;

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


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