Diff for /loncom/imspackages/imsimportdocs.pm between versions 1.29 and 1.35

version 1.29, 2009/11/20 18:25:34 version 1.35, 2017/11/05 20:00:48
Line 33  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 LONCAPA::map();
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
Line 41  use LONCAPA; Line 40  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 101  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 125  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 177  sub handler { Line 164  sub handler {
         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') {      
         &jscript_one(\$javascript);  
     } elsif ($env{'form.phase'} eq 'two') {      } elsif ($env{'form.phase'} eq 'two') {
         &jscript_two(\$javascript);          $javascript = &jscript_two();
     } elsif ($env{'form.phase'} eq 'three') {  
         &jscript_three(\$javascript);  
     }      }
   
     $javascript =       $javascript = 
Line 200  sub handler { Line 183  sub handler {
     $r->print($start_page);      $r->print($start_page);
   
     if ($env{'form.phase'} eq 'one') {      if ($env{'form.phase'} eq 'one') {
         &display_one($r);                 &display_one($r,$coursenum,\@areas,\%areaname,%cmsmap);
     } elsif ($env{'form.phase'} eq 'two') {      } elsif ($env{'form.phase'} eq 'two') {
         &display_two($r,$coursenum,\@areas,\%areaname,%cmsmap);          &display_two($r,$coursenum,$coursedom,$uname,$udom,\@areas,%cmsmap);
     } elsif ($env{'form.phase'} eq 'three') {  
         &display_three($r,$coursenum,$coursedom,$uname,$udom,\@areas,%cmsmap);  
     }         }   
     $r->print(&Apache::loncommon::end_page());      $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(  
         '<form action="/adm/imsimportdocs" method="post"'  
        .' enctype="multipart/form-data" name="pickcms">'  
     );  
   
     # Step 1  
     $r->print(  
        &Apache::lonhtmlcommon::topic_bar(  
             1,&mt('Specify the Course Management system used to create the package'))  
        .&mt('Please choose the CMS used to create your IMS content package:').' '  
        .'<select name="source">'  
        .'<option value="-1" selected="selected">'.&mt('Please select').'</option>'  
        .'<option value="bb5">Blackboard 5</option>'  
        .'<option value="bb6">Blackboard 6</option>'  
        .'<option value="angel5">ANGEL 5.5</option>'  
        .'<option value="webctce4">WebCT 4 Campus Edition</option>'  
        .'</select>'  
     );  
   
     # Step 2  
     $r->print(  
        &Apache::lonhtmlcommon::topic_bar(  
            2,&mt('Locate the IMS content package you wish to upload'))  
       .'<input type="hidden" name="folder" value="'.$env{'form.folder'}.'" />'  
       .'<input type="hidden" name="phase" value="two" />'  
       .&mt('File:')  
       .' <input type="file" name="uploadname" size="40" />'  
     );  
   
     # Buttons  
     $r->print(  
        '<hr />'  
       .'<p>'  
       .'<input type="button" name="exitpage" value="'.&mt('Cancel').'"'  
       .' onclick="javascript:self.close()" />'  
       .' '  
       .'<input type="button" name="nextpage" value="'.&mt('Upload IMS package').'"'  
       .' onclick="javascript:nextPage()" />'  
       .'</p>'  
     );  
   
     $r->print('</form>');  
 }  }
   
   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);
Line 295  sub display_two { Line 225  sub display_two {
   
     if ($unzip_result ne 'ok') {      if ($unzip_result ne 'ok') {
         $r->print(          $r->print(
             '<p class="LC_warning">'              &Apache::loncommon::confirmwrapper(
            .&mt('Processing of your IMS package failed because the file you'                  &Apache::lonhtmlcommon::confirm_success(
                .' uploaded could not be unzipped.')                      &mt('Processing of your IMS package failed because the file you'
            .'</p>'                         .' uploaded could not be unzipped.'),1)
              .'<br />'.&mt('Error: [_1]',$unzip_result))
         );          );
         return();          return();
     }      }
Line 309  sub display_two { Line 240  sub display_two {
                            \%resinfo,'choose',\%includedres,\%includeditems);                             \%resinfo,'choose',\%includedres,\%includeditems);
     if ($manifest_result ne 'ok') {      if ($manifest_result ne 'ok') {
         $r->print(          $r->print(
            '<p class="LC_warning">'              '<br />'.&Apache::loncommon::confirmwrapper(
           .&mt('Unpacking of your IMS package failed because an IMS manifest file was not located in the package.')                  &Apache::lonhtmlcommon::confirm_success(
           .'</p>'                      &mt('Unpacking of your IMS package failed because an IMS manifest file'
                          .' was not located in the package.'),1))
         );          );
         return();          return();
     }      }
   
     # Count areas depending on cms version      # Count areas depending on cms version
     foreach my $res (sort keys %resources) {      foreach my $res (sort(keys(%resources))) {
         if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webctce4') {          if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webctce4') {
             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} ++;
                 }                  }
             }              }
         } elsif ($cms eq 'angel5') {          } elsif ($cms eq 'angel5') {
             foreach my $area (keys %{$cmsmap{$cms}}) {              foreach my $area (keys(%{$cmsmap{$cms}})) {
                 if ($area eq 'doc') {                  if ($area eq 'doc') {
                     if (grep/^$resources{$res}{type}$/,@{$cmsmap{$cms}{doc}}) {                      if (grep/^$resources{$res}{type}$/,@{$cmsmap{$cms}{doc}}) {
                         $count{$area} ++;                          $count{$area} ++;
Line 345  sub display_two { Line 277  sub display_two {
     }      }
   
   
     # Start output: Step 3 and step 4      # Start output: Step 1 and step 2
   
     $r->print(      $r->print(
         '<form name="pickoptions" method="post" action="">'          '<form name="pickoptions" method="post" action="">'
        .&Apache::lonhtmlcommon::topic_bar(         .&Apache::lonhtmlcommon::topic_bar(
             3,&mt('Choose which content types you wish to import'))              1,&mt('Choose which content types you wish to import'))
        .'<p>'         .'<p>'
        .&mt('Check the checkboxes for all areas you wish to import from the IMS package:')         .&mt('Check the checkboxes for all areas you wish to import from the IMS package:')
        .'</p>'         .'</p>'
Line 420  sub display_two { Line 352  sub display_two {
   
     $r->print(      $r->print(
         &Apache::lonhtmlcommon::topic_bar(          &Apache::lonhtmlcommon::topic_bar(
             4,&mt('Choose display options for listing of contents of top level of package'))              2,&mt('Choose display options for listing of contents of top level of package'))
        .'<p>'         .'<p>'
        .&mt('Select a display option for the package content:')         .&mt('Select a display option for the package content:')
        .'</p>'         .'</p>'
Line 443  sub display_two { Line 375  sub display_two {
         '<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="two" />'
     );      );
     $r->print(      $r->print(
         '<hr />'          '<hr />'
Line 459  sub display_two { Line 391  sub display_two {
    $r->print('</form>');     $r->print('</form>');
 }  }
   
   sub display_two {
 sub display_three {  
     my ($r,$crs,$cdom,$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 = '';  
     if ($crs =~ m/^(\d)(\d)(\d)/) {  
         $longcrs = $1.'/'.$2.'/'.$3.'/'.$crs;  
     }  
     my %importareas = ();      my %importareas = ();
     my %includedres = ();      my %includedres = ();
     my %includeditems = ();      my %includeditems = ();
Line 526  sub display_three { Line 453  sub display_three {
   
     my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'prepare',\%includedres,\%includeditems);      my $manifest_result = &Apache::imsprocessor::process_manifest($cms,$tempdir,\%resources,\%items,\%hrefs,\%resinfo,'prepare',\%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 ($importareas{$resources{$res}{type}}) {              if ($importareas{$resources{$res}{type}}) {
                 $includedres{$res} = 1;                  $includedres{$res} = 1;
             }              }
         }          }
         foreach my $itm (sort keys %items) {          foreach my $itm (sort(keys(%items))) {
             &Apache::imsprocessor::get_imports(\%includeditems,\%items,\%resources,\%importareas,$itm);              &Apache::imsprocessor::get_imports(\%includeditems,\%items,\%resources,\%importareas,$itm);
         }          }
     }      }
     foreach my $itm (sort keys %includeditems) {      foreach my $itm (sort(keys(%includeditems))) {
         &Apache::imsprocessor::get_parents(\%includeditems,\%items,$itm);          &Apache::imsprocessor::get_parents(\%includeditems,\%items,$itm);
     }      }
   
Line 573  sub display_three { Line 500  sub display_three {
   
         &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);          &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,$destdir,$timenow,\%importareas);          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,\@targets,\%hrefs,$udom,$uname,'',$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems);
   
Line 629  sub display_three { Line 556  sub display_three {
     # Re-initialize Button      # Re-initialize Button
     my $initbutton =      my $initbutton =
            '<input type="button" value="'             '<input type="button" value="'
           .&mt('re-initializing course')            .&mt('re-initializing Course')
           .'" onclick="javascript:init(this.form)" />';            .'" onclick="javascript:init(this.form)" />';
     $r->print(      $r->print(
         '<form method="post" action="/adm/roles" target="loncapaclient" name="importDone">'          '<form method="post" action="/adm/roles" target="loncapaclient" name="importDone">'

Removed from v.1.29  
changed lines
  Added in v.1.35


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