Diff for /loncom/imspackages/imsimport.pm between versions 1.35 and 1.36

version 1.35, 2011/10/24 22:02:38 version 1.36, 2011/11/03 17:54:53
Line 43  use LONCAPA; Line 43  use LONCAPA;
   
 # ----------------------------------------------------------------  Jscript One  # ----------------------------------------------------------------  Jscript One
 sub jscript_one {  sub jscript_one {
     my ($fullpath,$jsref,$formname) = @_;      my ($fullpath,$formname) = @_;
   
     my %body_layout = ('rightmargin'  => "0",      my %body_layout = ('rightmargin'  => "0",
        'leftmargin'   => "0",         'leftmargin'   => "0",
Line 66  sub jscript_one { Line 66  sub jscript_one {
                nndi => 'Enter the name of the new directory where you will store the contents of your IMS package.',                 nndi => 'Enter the name of the new directory where you will store the contents of your IMS package.',
                go => 'Go',                  go => 'Go', 
              );               );
     $$jsref = <<"END_OF_ONE";      return <<"END_OF_ONE";
 function verify() {  function verify() {
  if ((document.forms.$formname.newdir.value == '')  || (!document.forms.$formname.newdir.value)) {   if ((document.forms.$formname.newdir.value == '')  || (!document.forms.$formname.newdir.value)) {
    alert('$lt{'ddir'}')     alert('$lt{'ddir'}')
Line 115  END_OF_ONE Line 115  END_OF_ONE
   
 # ----------------------------------------------------------------  Jscript Two  # ----------------------------------------------------------------  Jscript Two
 sub jscript_two {  sub jscript_two {
     my ($javascript,$user,$dom,$numcrs) = @_;      my ($user,$dom,$numcrs) = @_;
     my %crsentry = ();      my %crsentry = ();
     my $course_list;      my $course_list;
     my $title_list;      my $title_list;
Line 134  sub jscript_two { Line 134  sub jscript_two {
     $course_list = '"'.join('","',@crslist).'"';      $course_list = '"'.join('","',@crslist).'"';
     $$numcrs = @crslist;      $$numcrs = @crslist;
   
     $$javascript = qq#      return <<"END_OF_TWO";
   
 function checkCourse() {  function checkCourse() {
   courseID_array = new Array($course_list)    courseID_array = new Array($course_list)
Line 280  function nextPage(caller) { Line 280  function nextPage(caller) {
   }    }
 }  }
   
 #;  END_OF_TWO
   
 }  }
   
 # ----------------------------------------------------------------  Jscript Three  
 sub jscript_three {  
     my $javascript = shift;  
 }  
   
 # ---------------------------------------------------------------- Display One  # ---------------------------------------------------------------- Display One
 sub display_one {  sub display_one {
     my ($r,$uname,$fn,$fullpath,$formname) = @_;      my ($r,$fn,$fullpath,$formname) = @_;
     $r->print('<form name="'.$formname.'" method="post">'.      $r->print('<form name="'.$formname.'" method="post">'.
               &Apache::lonhtmlcommon::topic_bar(1,&mt('Specify the Course Management system used to create the package')).                &Apache::lonhtmlcommon::topic_bar(1,&mt('Specify the Course Management system used to create the package')).
         &mt('Choose the CMS used to create your IMS content package.').'&nbsp;&nbsp;          &mt('Choose the CMS used to create your IMS content package.').'&nbsp;&nbsp;
Line 305  sub display_one { Line 300  sub display_one {
         </select><br />'."\n".          </select><br />'."\n".
         &Apache::lonhtmlcommon::topic_bar(2,&mt('Create a directory where you will unpack your IMS package'))."\n".          &Apache::lonhtmlcommon::topic_bar(2,&mt('Create a directory where you will unpack your IMS package'))."\n".
          &mt('Create a destination LON-CAPA directory in which to store the contents of the IMS package file.').'&nbsp;&nbsp;<input type="button" name="createdir" value="Create Directory" onClick="javascript:createWin()" /><input type="hidden" name="newdir" value="" /><br /><br />           &mt('Create a destination LON-CAPA directory in which to store the contents of the IMS package file.').'&nbsp;&nbsp;<input type="button" name="createdir" value="Create Directory" onClick="javascript:createWin()" /><input type="hidden" name="newdir" value="" /><br /><br />
           <input type="hidden" name="uploaduname" value="'.$uname.'" />  
           <input type="hidden" name="filename" value="'.$fn.'" />            <input type="hidden" name="filename" value="'.$fn.'" />
           <input type="hidden" name="phase" value="three" />            <input type="hidden" name="phase" value="three" />
           <input type="button" name="nextpage" value="'.&mt('Proceed').'" onClick="javascript:nextPage();" />&nbsp;&nbsp;&nbsp;&nbsp;            <input type="button" name="nextpage" value="'.&mt('Proceed').'" onClick="javascript:nextPage();" />&nbsp;&nbsp;&nbsp;&nbsp;
Line 315  sub display_one { Line 309  sub display_one {
   
 # ---------------------------------------------------------------- Display Two  # ---------------------------------------------------------------- Display Two
 sub display_two {  sub display_two {
     my ($r,$zipupload,$areas,$areaname,$cmsmap,$uname,$newdir,$numcrs,$fullpath) = @_;      my ($r,$zipupload,$areas,$areaname,$cmsmap,$fn,$numcrs,$fullpath) = @_;
     &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 $dirname = $env{'form.newdir'};      my $tempdir = &Apache::imsprocessor::create_tempdir('CSTR',$env{'form.newdir'},'');
     my $tempdir = &Apache::imsprocessor::create_tempdir('CSTR',$dirname,'');  
     my $fname = &Apache::imsprocessor::uploadzip('CSTR',$tempdir,$zipupload);      my $fname = &Apache::imsprocessor::uploadzip('CSTR',$tempdir,$zipupload);
     my $unzip_result = '';      my $unzip_result = '';
     my $manifest_result = '';      my $manifest_result = '';
Line 459  sub display_two { Line 452  sub display_two {
           <input type="hidden" name="conditions" value="'.$conditions.'" />            <input type="hidden" name="conditions" value="'.$conditions.'" />
           <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="uploaduname" value="'.$uname.'" />            <input type="hidden" name="filename" value="'.$fn.'" />
           <input type="hidden" name="filename" value="'.$fname.'" />  
           <input type="hidden" name="phase" value="four" />'."\n");            <input type="hidden" name="phase" value="four" />'."\n");
             if ($count{board} == 0) {              if ($count{board} == 0) {
                 $r->print('<input type="hidden" name="board" value="" />'."\n");                  $r->print('<input type="hidden" name="board" value="" />'."\n");
Line 480  sub display_two { Line 472  sub display_two {
   
 # ---------------------------------------------------------------- Display Three  # ---------------------------------------------------------------- Display Three
 sub display_three {  sub display_three {
     my ($r,$uname,$udom,$areas,$areaname,$cmsmap,$destdir,$newdir) = @_;      my ($r,$uname,$udom,$areas,$areaname,$cmsmap,$destdir,$dirpath) = @_;
     my $crs = '';      my $crs = '';
     my $cdom = '';      my $cdom = '';
     my $db_handling = '';      my $db_handling = '';
Line 496  sub display_three { Line 488  sub display_three {
     if ( defined($env{'form.user_crs'}) ) {      if ( defined($env{'form.user_crs'}) ) {
         ($user_cdom,$user_crs) = split/\//,$env{'form.user_crs'};          ($user_cdom,$user_crs) = split/\//,$env{'form.user_crs'};
     }      }
     my $seqstem = "/res/$udom/$uname/$newdir";      my $seqstem = "/res/$udom/$uname/$dirpath";
     my %importareas = ();      my %importareas = ();
     my %includedres = ();      my %includedres = ();
     my %includeditems = ();      my %includeditems = ();
Line 595  sub display_three { Line 587  sub display_three {
   
         my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\@assessmentfiles,\%total);          my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$destdir,$timenow,\@assessmentfiles,\%total);
         
         &Apache::imsprocessor::build_structure($cms,'CSTR',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,$newdir,$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems,\%randompicks);          &Apache::imsprocessor::build_structure($cms,'CSTR',$destdir,\%items,\%resinfo,\%resources,\@targets,\%hrefs,$udom,$uname,$dirpath,$timenow,$cdom,$crs,\@timestamp,\%total,\@boards,\@announcements,\@quizzes,\@surveys,\@pools,\%boardnum,\@pages,\@sequences,\@topurls,\@topnames,\@packages,\%includeditems,\%randompicks);
   
         $r->print("<h3>IMS import completed</h3>");          $r->print("<h3>IMS import completed</h3>");
   
Line 604  sub display_three { Line 596  sub display_three {
         } else {          } else {
             $r->print($lt{'yims'}.' '.&mt('A total of [quant,_1,sequence], [quant,_2,composite page], [quant,_3,bulletin board], [quant,_4,quiz,quizzes], [quant,_5,survey], and [quant,_6,problem] have been created, and [quant,_7,file] copied.',$total{seq},$total{page},$total{board},$total{quiz},$total{surv},$total{prob},$total{file})."\n");              $r->print($lt{'yims'}.' '.&mt('A total of [quant,_1,sequence], [quant,_2,composite page], [quant,_3,bulletin board], [quant,_4,quiz,quizzes], [quant,_5,survey], and [quant,_6,problem] have been created, and [quant,_7,file] copied.',$total{seq},$total{page},$total{board},$total{quiz},$total{surv},$total{prob},$total{file})."\n");
         }          }
         $r->print('<br /><br />'.$lt{'plsv'}.' '.$lt{'tseq'}.'<br /><br />'.$lt{'tfin'}.'<br /><br /><a href="/priv/'.$udom.'/'.$uname.'/'.$newdir.'">'.$lt{'disp'}.'</a>');          $r->print('<br /><br />'.$lt{'plsv'}.' '.$lt{'tseq'}.'<br /><br />'.$lt{'tfin'}.'<br /><br /><a href="/priv/'.$udom.'/'.$uname.'/'.$dirpath.'/">'.$lt{'disp'}.'</a>');
         if ($destdir =~ m-^/home/httpd/html/priv/$udom/$uname/-) {          my $londocroot = $r->dir_config('lonDocRoot');
           if ($destdir =~ m{^\Q$londocroot/priv/$udom/$uname/$dirpath\E}) {
             system (" rm -r -f $destdir/temp");              system (" rm -r -f $destdir/temp");
         }          }
     } elsif ($manifest_result eq 'nomanifest') {      } elsif ($manifest_result eq 'nomanifest') {
Line 669  sub get_ccroles { Line 662  sub get_ccroles {
 # ---------------------------------------------------------------- Main Handler  # ---------------------------------------------------------------- Main Handler
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     my $uname;  
     my $udom;  
     my $javascript = '';  
     my $page_name = '';  
     my $current_page = '';  
     my $qcount = '';  
   
 # get personal information for this user      my $fn=$env{'form.filename'};
     my $user=$env{'user.name'};  
     my $dom=$env{'user.domain'};  
   
 #      if ($env{'form.filename1'}) {
 # re-attach user          $fn=$env{'form.filename1'}.$env{'form.filename2'};
 #  
     if ($env{'form.uploaduname'}) {  
         $env{'form.filename'}='/priv/'.$dom.'/'.$env{'form.uploaduname'}.'/'.  
             $env{'form.filename'};  
     }  
     ($uname,$udom)=  
         &Apache::loncacc::constructaccess($env{'form.filename'},  
                                           $r->dir_config('lonDefDomain'));  
     unless (($uname) && ($udom)) {  
         $r->log_reason($uname.' at '.$udom.  
                        ' trying to publish file '.$env{'form.filename'}.  
                        ' - not authorized',  
                        $r->filename);  
         return HTTP_NOT_ACCEPTABLE;  
     }      }
                                                                                                    $fn=~s{\+}{}g;
     my $fn;  
     if ($env{'form.filename'}) {      unless ($fn) {
         $fn=$env{'form.filename'};  
         $fn=~s/^https?\:\/\/[^\/]+\///;  
         $fn=~s/^\///;  
         $fn=~s/(priv\/)($LONCAPA::domain_re)\/($LONCAPA::username_re)//;  
         $fn=~s/\/+/\//g;  
     } else {  
         $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.          $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.
                        ' unspecified filename for upload', $r->filename);                         ' unspecified filename for upload', $r->filename);
         return HTTP_NOT_FOUND;          return HTTP_NOT_FOUND;
     }      }
     my $zipupload = '/home/httpd/html/priv/'.$udom.'/'.$uname.$fn;  
     my $pathname = &File::Basename::dirname($fn);      my ($uname,$udom) = &Apache::loncacc::constructaccess($fn);
     my $fullpath = '/priv/'.$udom.'/'.$uname.$pathname;      if (($uname eq '') || ($udom eq '')) {
     unless ($pathname eq '/') {          $r->log_reason($uname.' at '.$udom.
                          ' trying to publish file '.$fn.' - not authorized',
                          $r->filename);
           return HTTP_NOT_ACCEPTABLE;
       }
   
       my $londocroot = $r->dir_config('lonDocRoot');
       my $zipupload = $londocroot.$fn;
       my $fullpath = &File::Basename::dirname($fn);
       unless ($fullpath =~ m{/$}) {
         $fullpath .= '/';          $fullpath .= '/';
     }      }
   
   # get personal information for this user
       my $user=$env{'user.name'};
       my $dom=$env{'user.domain'};
   
       my $javascript = '';
       my $page_name = '';
       my $current_page = '';
       my $qcount = '';
     my @areas = ();      my @areas = ();
     my %cmsmap = ();      my %cmsmap = ();
     my %areaname = ();      my %areaname = ();
Line 729  sub handler { Line 711  sub handler {
   
     my $formname_one = 'info';      my $formname_one = 'info';
     if ($env{'form.phase'} eq 'two') {      if ($env{'form.phase'} eq 'two') {
         &jscript_one($fullpath,\$javascript,$formname_one);          $javascript = &jscript_one($fullpath,$formname_one);
     } elsif ($env{'form.phase'} eq 'three') {      } elsif ($env{'form.phase'} eq 'three') {
         &jscript_two(\$javascript,$user,$dom,\$numcrs);          $javascript = &jscript_two($user,$dom,\$numcrs);
     } elsif ($env{'form.phase'} eq 'four') {      }
         &jscript_three(\$javascript);      if ($javascript ne '') {
           $javascript = <<"END_JS";
   <script type="text/javascript">
   // <![CDATA[
   
   $javascript
   
   // ]]>
   </script>
   END_JS
     }      }
     $javascript = "<script type=\"text/javascript\">\n//<!--\n$javascript\n// --></script>\n";  
   
     my $title = 'Upload IMS package to Construction Space';      my $title = 'Upload IMS package to Construction Space';
     $r->print(&Apache::loncommon::start_page($title, $javascript));      $r->print(&Apache::loncommon::start_page($title, $javascript));
Line 745  sub handler { Line 735  sub handler {
                   .&mt('Co-Author [_1]',$uname.':'.$udom)                    .&mt('Co-Author [_1]',$uname.':'.$udom)
                   .'</span></p>'                    .'</span></p>'
         );          );
     }         }
     if ($env{'form.phase'} eq 'two') {      if ($env{'form.phase'} eq 'two') {
         my $flag = &Apache::lonupload::phasetwo($r,$fn,$uname,$udom,'imsimport');          my $flag = &Apache::lonupload::phasetwo($r,$fn,'imsimport');
         if ($flag eq 'ok') {          if ($flag eq 'ok') {
             &display_one($r,$uname,$fn,$fullpath,$formname_one);              &display_one($r,$fn,$fullpath,$formname_one);
         }          }
     } elsif ( ($env{'form.phase'} eq 'three') || ($env{'form.phase'} eq 'four') ) {      } elsif ( ($env{'form.phase'} eq 'three') || ($env{'form.phase'} eq 'four') ) {
         my $docroot = $env{'form.newdir'};          my $destdir = $env{'form.newdir'};
         my $newdir = '';          my $dirpath = $destdir;
         if ($docroot =~ m|/(.+)$|) {          $dirpath =~ s{^\Q$londocroot/priv/$udom/$uname/\E}{};
             $newdir = $1;  
         }  
         if ($env{'form.phase'} eq 'three') {          if ($env{'form.phase'} eq 'three') {
             &display_two ($r,$zipupload,\@areas,\%areaname,\%cmsmap,$uname,$newdir,\$numcrs,$fullpath);              &display_two($r,$zipupload,\@areas,\%areaname,\%cmsmap,$fn,\$numcrs,$fullpath);
         } elsif ($env{'form.phase'} eq 'four') {          } elsif ($env{'form.phase'} eq 'four') {
             &display_three ($r,$uname,$udom,\@areas,\%areaname,\%cmsmap,$docroot,$newdir);              &display_three($r,$uname,$udom,\@areas,\%areaname,\%cmsmap,$destdir,$dirpath);
         }          }
     } else {      } else {
         &Apache::lonupload::phaseone($r,$fn,$uname,$udom,'imsimport');          &Apache::lonupload::phaseone($r,$fn,'imsimport');
     }      }
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;

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


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