Diff for /loncom/interface/londocs.pm between versions 1.434.2.4 and 1.435

version 1.434.2.4, 2011/05/27 19:39:25 version 1.435, 2010/08/16 08:58:39
Line 1660  sub editor { Line 1660  sub editor {
                      .'<th>'.&mt('Actions').'</th>'                       .'<th>'.&mt('Actions').'</th>'
                      .'<th colspan="2">'.&mt('Document').'</th>');                       .'<th colspan="2">'.&mt('Document').'</th>');
             if ($folder !~ /^supplemental/) {              if ($folder !~ /^supplemental/) {
                 $r->print('<th colspan="4">'.&mt('Settings').'</th>');                  $->print('<th colspan="4">'.&mt('Settings').'</th>');
             }              }
             $r->print(&Apache::loncommon::end_data_table_header_row());              $r->print(&Apache::loncommon::end_data_table_header_row());
         }          }
Line 1682  sub editor { Line 1682  sub editor {
 sub process_file_upload {  sub process_file_upload {
     my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;      my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;
 # upload a file, if present  # upload a file, if present
     my ($parseaction,$showupload,$nextphase,$mimetype);      my $parseaction;
     if ($env{'form.parserflag'}) {     if ($env{'form.parserflag'}) {
         $parseaction = 'parse';          $parseaction = 'parse';
     }      }
       my $phase_status;
     my $folder=$env{'form.folder'};      my $folder=$env{'form.folder'};
     if ($folder eq '') {      if ($folder eq '') {
         $folder='default';          $folder='default';
Line 1704  sub process_file_upload { Line 1705  sub process_file_upload {
             $LONCAPA::map::resources[1]='';              $LONCAPA::map::resources[1]='';
         }          }
         if ($fatal) {          if ($fatal) {
             $$upload_output = '<p><span class="LC_error">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</span></p>';              return 'failed';
             return;  
         }          }
         my $destination = 'docs/';          my $destination = 'docs/';
         if ($folder =~ /^supplemental/) {          if ($folder =~ /^supplemental/) {
Line 1716  sub process_file_upload { Line 1716  sub process_file_upload {
         } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {          } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
             $destination .=  $2.'/';              $destination .=  $2.'/';
         }          }
 # this is for a course, not a user, so set context to coursedoc.  # this is for a course, not a user, so set coursedoc flag
   # probably the only place in the system where this should be "1"
         my $newidx=&LONCAPA::map::getresidx();          my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;          $destination .= $newidx;
         my $url=&Apache::lonnet::userfileupload('uploaddoc','coursedoc',$destination,          my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
  $parseaction,$allfiles,   $parseaction,$allfiles,
                                                 $codebase,undef,undef,undef,undef,   $codebase);
                                                 undef,undef,\$mimetype);  
         if ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E.*/([^/]+)$}) {  
             my $stored = $1;  
             $showupload = '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.  
                           $stored.'</span>').'</p>';  
         } else {  
             my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$});  
   
             $$upload_output = '<p><span class="LC_error">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</span></p>';  
             return;  
         }  
         my $ext='false';          my $ext='false';
         if ($url=~m{^http://}) { $ext='true'; }          if ($url=~m{^http://}) { $ext='true'; }
  $url     = &LONCAPA::map::qtunescape($url);   $url     = &LONCAPA::map::qtunescape($url);
Line 1749  sub process_file_upload { Line 1739  sub process_file_upload {
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
     $folder.'.'.$container);      $folder.'.'.$container);
         if ($fatal) {          if ($fatal) {
             $$upload_output = '<p><span class="LC_error">'.$errtext.'</span></p>';              $$upload_output .= '<p><span class="LC_error">'.$errtext.'</span></p>';
             return;              return 'failed';
         } else {          } else {
             if ($parseaction eq 'parse' && $mimetype eq 'text/html') {              if ($parseaction eq 'parse') {
                 $$upload_output = $showupload;  
                 my $total_embedded = scalar(keys(%{$allfiles}));                  my $total_embedded = scalar(keys(%{$allfiles}));
                 if ($total_embedded > 0) {                  if ($total_embedded > 0) {
                     my $uploadphase = 'upload_embedded';                      my $num = 0;
                     my $primaryurl = &HTML::Entities::encode($url,'<>&"');      my $state = '
                     my $state = &embedded_form_elems($uploadphase,$primaryurl,$newidx);     <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />
                     my ($embedded,$num) =     <input type="hidden" name="cmd" value="upload_embedded" />
                         &Apache::loncommon::ask_for_embedded_content(     <input type="hidden" name="newidx" value="'.$newidx.'" />
                             '/adm/coursedocs',$state,$allfiles,$codebase,{'docs_url' => $url});     <input type="hidden" name="primaryurl" value="'.&escape($url).'" />
                     if ($embedded) {     <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
                         if ($num) {      $phase_status = 'phasetwo';
                             $$upload_output .=  
                                  '<p>'.&mt('This file contains embedded multimedia objects, which need to be uploaded.').'</p>'.$embedded;                      $$upload_output .=
                             $nextphase = $uploadphase;   'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.
                         } else {   &Apache::loncommon::ask_for_embedded_content(
                             $$upload_output .= $embedded;                              '/adm/coursedocs',$state,$allfiles,$codebase);
                         }  
                     } else {  
                         $$upload_output .= &mt('Embedded item(s) already present, so no additional upload(s) required').'<br />';  
                     }  
                 } else {                  } else {
                     $$upload_output .= &mt('No embedded items identified').'<br />';                      $$upload_output .= 'No embedded items identified<br />';
                 }                  }
             }              }
         }          }
     }      }
     return $nextphase;      return $phase_status;
   }
   
   sub process_secondary_uploads {
       my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;
       my $folder=$env{'form.folder'};
       my $destination = 'docs/';
       if ($folder =~ /^supplemental/) {
           $destination = 'supplemental/';
       }
       if (($folder eq 'default') || ($folder eq 'supplemental')) {
           $destination .= 'default/';
       } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
           $destination .=  $2.'/';
       }
       $destination .= $newidx;
       my ($url,$filename);
       $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);
       ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});
       return $filename;
 }  }
   
 sub is_supplemental_title {  sub is_supplemental_title {
Line 1844  sub entryline { Line 1848  sub entryline {
     }      }
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $type = $container = 'page';          $type = $container = 'page';
         $esc_path=&escape($env{'form.pagepath'});          $esc_path=&escape($path = $env{'form.pagepath'});
  $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');   $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');
         $symb=&escape($env{'form.pagesymb'});          $symb=&escape($env{'form.pagesymb'});
     }      }
Line 2821  sub create_form_ul { Line 2825  sub create_form_ul {
   
   my %allfiles = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output,$uploadphase);    my ($upload_result,$upload_output);
   if ($allowed) {    if ($allowed) {
       if (($env{'form.uploaddoc.filename'}) &&        if (($env{'form.uploaddoc.filename'}) &&
   ($env{'form.cmd'}=~/^upload_(\w+)/)) {    ($env{'form.cmd'}=~/^upload_(\w+)/)) {
           my $context = $1;  # Process file upload - phase one - upload and parse primary file.
           # Process file upload - phase one - upload and parse primary file.    undef($hadchanges);
           undef($hadchanges);            $upload_result = &process_file_upload(\$upload_output,$coursenum,
           $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,   $coursedom,\%allfiles,
                                               \%allfiles,\%codebase,$context);   \%codebase,$1);
   if ($hadchanges) {    if ($hadchanges) {
       &mark_hash_old();        &mark_hash_old();
   }    }
           $r->print($upload_output);            if ($upload_result eq 'phasetwo') {
       } elsif ($env{'form.phase'} eq 'upload_embedded') {                $r->print($upload_output);
           # Process file upload - phase two - upload embedded objects            }
           $uploadphase = 'check_embedded';        } elsif ($env{'form.phasetwo'}) {
           my $primaryurl = &HTML::Entities::encode($env{'form.primaryurl'},'<>&"');            my %newname = ();
           my $state = &embedded_form_elems($uploadphase,$primaryurl,            my %origname = ();
                                            $env{'form.newidx'});            my %attribs = ();
           my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};            my $updateflag = 0;
           my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};            my $residx = $env{'form.newidx'};
           my ($destination,$dir_root) = &embedded_destination();            my $primary_url = &unescape($env{'form.primaryurl'});
           my $url_root = '/uploaded/'.$docudom.'/'.$docuname;  # Process file upload - phase two - gather secondary files.
           my $actionurl = '/adm/coursedocs';            for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {
           my ($result,$flag) =                if ($env{'form.embedded_item_'.$i.'.filename'}) {
               &Apache::loncommon::upload_embedded('coursedoc',$destination,                    my $javacodebase;
                   $docuname,$docudom,$dir_root,$url_root,undef,undef,undef,$state,                    $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);
                   $actionurl);                    $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});
           $r->print($result.&return_to_editor());                    if (exists($env{'form.embedded_codebase_'.$i})) {
       } elsif ($env{'form.phase'} eq 'check_embedded') {                        $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});
           # Process file upload - phase three - modify references in HTML file                        $origname{$i} =~ s#^\Q$javacodebase\E/##;
           $uploadphase = 'modified_orightml';                    }
           my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};                    my @attributes = ();
           my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};                    if ($env{'form.embedded_attrib_'.$i} =~ /:/) {
           my ($destination,$dir_root) = &embedded_destination();                        @attributes = split(/:/,$env{'form.embedded_attrib_'.$i});
           $r->print(&Apache::loncommon::modify_html_refs('coursedoc',$destination,                    } else {
                                                          $docuname,$docudom,undef,                        @attributes = ($env{'form.embedded_attrib_'.$i});
                                                          $dir_root).                    }
                    &return_to_editor());                    foreach my $attr (@attributes) {
                         push(@{$attribs{$i}},&unescape($attr));
                     }
                     if ($javacodebase) {
                         $codebase{$i} = $javacodebase;
                         $codebase{$i} =~ s#/$##;
                         $updateflag = 1;
                     }
                 }
                 unless ($newname{$i} eq $origname{$i}) {
                     $updateflag = 1;
                 }
             }
   # Process file upload - phase three - modify primary file
             if ($updateflag) {
                 my ($content,$rtncode);
                 my $updateflag = 0;
                 my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode);
                 if ($getstatus eq 'ok') {
                     foreach my $item (keys(%newname)) {
                         if ($newname{$item} ne $origname{$item}) {
                             my $attrib_regexp = '';
                             if (@{$attribs{$item}} > 1) {
                                 $attrib_regexp = join('|',@{$attribs{$item}});
                             } else {
                                 $attrib_regexp = $attribs{$item}[0];
                             }
                             if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) {
                             }
                             $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;
                         }
                         if (exists($codebase{$item})) {
                             $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs
                         }
                     }
   # Save edited file.
                     my $saveresult;
                     my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
                     my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
                     my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);
                 } else {
                     &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);
                 }
             }
       }        }
   }    }
   
   unless ($showdoc || $uploadphase) {    unless ($showdoc ||  $upload_result eq 'phasetwo') {
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
                 'uplm' => 'Upload a new main '.lc($crstype).' document',                  'uplm' => 'Upload a new main '.lc($crstype).' document',
Line 2874  sub create_form_ul { Line 2921  sub create_form_ul {
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
  'book' => 'Import Bookmarks',   'book' => 'Import Bookmarks',
    'wish' => 'Import from Wishlist',
                 'selm' => 'Select Map',                  'selm' => 'Select Map',
                 'load' => 'Load Map',                  'load' => 'Load Map',
                 'reco' => 'Recover Deleted Documents',                  'reco' => 'Recover Deleted Documents',
Line 2924  CHBO Line 2972  CHBO
  $fileupload   $fileupload
  <br />   <br />
  $lt{'title'}:<br />   $lt{'title'}:<br />
  <input type="text" size="80" name="comment" />   <input type="text" size="50" name="comment" />
  $uploadtag   $uploadtag
  <input type="hidden" name="cmd" value="upload_default" />   <input type="hidden" name="cmd" value="upload_default" />
  <br />   <br />
Line 2947  SEDFFORM Line 2995  SEDFFORM
  { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'"  onclick="javascript:groupsearch()" />' => "$uploadtag<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'"  onclick="javascript:groupsearch()" />' => "$uploadtag<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" },
  { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'"  onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'"  onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },
  { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/vbkm.png" alt="'.$lt{book}.'" onclick="javascript:groupopen(0,1,1);" />' => "<a class='LC_menubuttons_link' href='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/vbkm.png" alt="'.$lt{book}.'" onclick="javascript:groupopen(0,1,1);" />' => "<a class='LC_menubuttons_link' href='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },
    { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{wish}.'" onclick="javascript:open_Wishlist_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_Wishlist_Import();'>$lt{'wish'}</a>" },
  );   );
  $simpleeditdefaultform .= create_form_ul(create_list_elements(@simpleeditdefaultforma));   $simpleeditdefaultform .= create_form_ul(create_list_elements(@simpleeditdefaultforma));
  $simpleeditdefaultform .=(<<SEDFFORM);   $simpleeditdefaultform .=(<<SEDFFORM);
Line 3016  HIDDENFORM Line 3065  HIDDENFORM
     }      }
         }          }
         $r->print('<li '.$active          $r->print('<li '.$active
                  . ' onmouseover="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"'
                . ' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'main'}{$crstype}.'</b></a></li>');                 . ' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'main'}{$crstype}.'</b></a></li>');
         $active = '';          $active = '';
         if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {          if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {
Line 3024  HIDDENFORM Line 3074  HIDDENFORM
             }              }
         }          }
         $r->print('<li '.$active          $r->print('<li '.$active
               .' onmouseover="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"'
             .' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'supplemental'}{$crstype}.'</b></a></li>');              .' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'supplemental'}{$crstype}.'</b></a></li>');
         $r->print('</ul>');          $r->print('</ul>');
     } else {      } else {
Line 3421  $r->print('</div></div>'); Line 3472  $r->print('</div></div>');
 </form>');  </form>');
     }      }
   } else {    } else {
       unless ($uploadphase) {        unless ($upload_result eq 'phasetwo') {
 # -------------------------------------------------------- This is showdoc mode  # -------------------------------------------------------- This is showdoc mode
           $r->print("<h1>".&mt('Uploaded Document').' - '.            $r->print("<h1>".&mt('Uploaded Document').' - '.
  &Apache::lonnet::gettitle($r->uri).'</h1><p>'.   &Apache::lonnet::gettitle($r->uri).'</h1><p>'.
Line 3434  $r->print('</div></div>'); Line 3485  $r->print('</div></div>');
  return OK;   return OK;
 }  }
   
 sub embedded_form_elems {  
     my ($phase,$primaryurl,$newidx) = @_;  
     my $folderpath = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');  
     return <<STATE;  
     <input type="hidden" name="folderpath" value="$folderpath" />  
     <input type="hidden" name="cmd" value="upload_embedded" />  
     <input type="hidden" name="newidx" value="$newidx" />  
     <input type="hidden" name="phase" value="$phase" />  
     <input type="hidden" name="primaryurl" value="$primaryurl" />  
 STATE  
 }  
   
 sub embedded_destination {  
     my $folder=$env{'form.folder'};  
     my $destination = 'docs/';  
     if ($folder =~ /^supplemental/) {  
         $destination = 'supplemental/';  
     }  
     if (($folder eq 'default') || ($folder eq 'supplemental')) {  
         $destination .= 'default/';  
     } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {  
         $destination .=  $2.'/';  
     }  
     $destination .= $env{'form.newidx'};  
     my $dir_root = '/userfiles';  
     return ($destination,$dir_root);  
 }  
   
 sub return_to_editor {  
     my $actionurl = '/adm/coursedocs';  
     return '<p><form name="backtoeditor" method="post" action="'.$actionurl.'" />'."\n".  
            '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" /></form>'."\n".  
            '<a href="javascript:document.backtoeditor.submit();">'.&mt('Return to Editor').  
            '</a></p>';  
 }  
   
 sub generate_admin_options {  sub generate_admin_options {
   my ($help_ref,$env_ref) = @_;    my ($help_ref,$env_ref) = @_;
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(

Removed from v.1.434.2.4  
changed lines
  Added in v.1.435


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