Diff for /loncom/interface/londocs.pm between versions 1.446 and 1.470

version 1.446, 2010/12/11 00:09:52 version 1.470, 2011/12/25 18:19:38
Line 176  sub dumpcourse { Line 176  sub dumpcourse {
     $newfilename=&clean($newfilename);      $newfilename=&clean($newfilename);
     $newfilename.='.'.$ext;      $newfilename.='.'.$ext;
     my @dirs=split(/\//,$newfilename);      my @dirs=split(/\//,$newfilename);
     my $path='/home/'.$ca.'/public_html';      my $path=$r->dir_config('lonDocRoot')."/priv/$cd/$ca";
     my $makepath=$path;      my $makepath=$path;
     my $fail=0;      my $fail=0;
     for (my $i=0;$i<$#dirs;$i++) {      for (my $i=0;$i<$#dirs;$i++) {
Line 280  sub exportcourse { Line 280  sub exportcourse {
     my %discussiontime = &Apache::lonnet::dump('discussiontimes',      my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                                $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});                                                 $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
     my $numdisc = keys(%discussiontime);      my $numdisc = keys(%discussiontime);
       my $numprobs = 0;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').          $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').
Line 310  sub exportcourse { Line 311  sub exportcourse {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['archive','discussion']);                                              ['archive','discussion']);
   
           my $format = $env{'form.format'};
         my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');          my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');
         my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');          my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');
         if (@exportitems == 0 && @discussions == 0) {          if (@exportitems == 0 && @discussions == 0) {
Line 331  sub exportcourse { Line 333  sub exportcourse {
             my $imsresources;              my $imsresources;
             my $tempexport;              my $tempexport;
             my $copyresult;              my $copyresult;
             my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);              my $testbank;
               my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport,$format,\$testbank);
             if ($manifestok) {              if ($manifestok) {
                 &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest);                  &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest,$format,$testbank);
                 close($ims_manifest);                  close($ims_manifest);
   
 #Create zip file in prtspool  #Create zip file in prtspool
Line 435  sub exportcourse { Line 438  sub exportcourse {
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {                  if (($curRes->is_sequence()) || ($curRes->is_page())) {
                     $lastcontainer = $currelem;                      $lastcontainer = $currelem;
                     $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';                      $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';
                   } elsif ($curRes->is_problem()) {
                       $numprobs ++; 
                 }                  }
                 $display .= ' />'."\n";                  $display .= ' />'."\n";
                 for (my $i=0; $i<$depth; $i++) {                  for (my $i=0; $i<$depth; $i++) {
Line 519  function containerCheck(item) { Line 524  function containerCheck(item) {
  $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',   $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',
  $scripttag));   $scripttag));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
           if ($numprobs > 0) {
               $display .= '<p><span class="LC_nobreak">'.
                           &mt('Export format for LON-CAPA problems:').
                           '<label><input type="radio" name="format" value="xml" checked="checked" />'.
                           '&nbsp;'.&mt('XML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="html" />'.
                           '&nbsp;'.&mt('HTML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="plaintext" />'.
                           '&nbsp;'.&mt('Text').'</label></span></p>';
           }
  $r->print($display.   $r->print($display.
                   '<p><input type="hidden" name="finishexport" value="1" />'.                    '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.                    '<input type="submit" name="exportcourse" value="'.
Line 527  function containerCheck(item) { Line 542  function containerCheck(item) {
 }  }
   
 sub create_ims_store {  sub create_ims_store {
     my ($now,$manifestok,$outcome,$tempexport) = @_;      my ($now,$manifestok,$outcome,$tempexport,$format,$testbank) = @_;
     $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';      $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';
     my $ims_manifest;      my $ims_manifest;
     if (!-e $$tempexport) {      if (!-e $$tempexport) {
Line 571  sub create_ims_store { Line 586  sub create_ims_store {
 '  <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n".  '  <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n".
 '    <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'.  '    <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'.
 ' structure="hierarchical">'."\n".  ' structure="hierarchical">'."\n".
 '      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>'  '      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>';
           if ($format eq 'plaintext') {
               my $testbankfilename = $$tempexport.'/testbank.txt';
               $$testbank = Apache::File->new('>'.$testbankfilename);
           }
     } else {      } else {
         $$outcome .= 'An error occurred opening the IMS manifest file.<br />'          $$outcome .= 'An error occurred opening the IMS manifest file.<br />'
 ;  ;
Line 580  sub create_ims_store { Line 599  sub create_ims_store {
 }  }
   
 sub build_package {  sub build_package {
     my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,$ims_manifest) = @_;      my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,
           $ims_manifest,$format,$testbank) = @_;
 # first iterator to look for dependencies  # first iterator to look for dependencies
     my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);      my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
     my $curRes;      my $curRes;
Line 619  sub build_package { Line 639  sub build_package {
     $count = 0;      $count = 0;
     my $imsresources;      my $imsresources;
     my $pkgdepth;      my $pkgdepth;
       my $currdirpath = 'Top';
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if ($curRes == $it->BEGIN_MAP()) {          if ($curRes == $it->BEGIN_MAP()) {
             $prevdepth = $depth;              $prevdepth = $depth;
Line 656  sub build_package { Line 677  sub build_package {
               '<title>'.$curRes->title().'</title>';                '<title>'.$curRes->title().'</title>';
                 print $ims_manifest "\n".$itementry;                  print $ims_manifest "\n".$itementry;
   
                 unless ($curRes->is_sequence()) {                  if ($curRes->is_sequence()) {
                       $currdirpath = 'Top';
                       my $pcslist = $curRes->map_hierarchy();
                       if ($pcslist ne '') {
                           foreach my $pc (split(/,/,$pcslist),$curRes->map_pc()) {
                               next if ($pc <= 1);
                               my $res = $navmap->getByMapPc($pc);
                               if (ref($res)) {
                                   my $encloser = $res->title();
                                   if ($encloser) {
                                       if ($currdirpath) {
                                           $currdirpath .= ' -> ';
                                       }
                                       $currdirpath .= $encloser;
                                   }
                               }
                           }
                       }
                   } else {
                     my $content_file;                      my $content_file;
                     my @hrefs = ();                      my @hrefs = ();
                     &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport);                      &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport,$format,$currdirpath,$testbank);
                     if ($content_file) {                      if ($content_file) {
                         $imsresources .= "\n".                          $imsresources .= "\n".
                      '   <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count.                       '   <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count.
Line 720  sub get_dependencies { Line 759  sub get_dependencies {
 }  }
   
 sub process_content {  sub process_content {
     my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_;      my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport,$format,$currdirpath,$testbank) = @_;
     my $content_type;      my $content_type;
     my $message;      my $message;
     my @uploads = ();      my @uploads = ();
Line 777  sub process_content { Line 816  sub process_content {
             $canedit= 1;              $canedit= 1;
         }          }
 # only include problem code where current user is author  # only include problem code where current user is author
         if ($canedit) {          if (($format eq 'html') || ($format eq 'plaintext')) {
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');              my $title = $curRes->title;
         } else {              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,$format,$currdirpath,$title,$testbank);
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');          } elsif ($format eq 'xml') {
               if ($canedit) {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
               } else {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
               }
         }          }
     } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {      } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
         $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');          $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
Line 800  sub process_content { Line 844  sub process_content {
 }  }
   
 sub replicate_content {  sub replicate_content {
     my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;      my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller,$currdirpath,
           $title,$testbank) = @_;
     my ($map,$ind,$url);      my ($map,$ind,$url);
     if ($caller eq 'templateupload') {      if ($caller eq 'templateupload') {
         $url = $symb;          $url = $symb;
Line 844  sub replicate_content { Line 889  sub replicate_content {
                 } else {                  } else {
                     $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";                      $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";
                 }                  }
             } elsif ($caller eq 'noedit') {              } elsif (($caller eq 'noedit') || ($caller eq 'html') || 
                        ($caller eq 'plaintext')) {
 # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.  # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
                   my %form = (
                                grade_symb     => $symb,
                                grade_courseid => $cdom.'_'.$cnum,
                                grade_domain   => $env{'user.domain'},
                                grade_username => $env{'user.name'},
                                grade_imsexport => 1,
                                instructor_comments => 'hide',
                              );
                   my $feedurl=&Apache::lonnet::clutter($url);
                   my ($userview,$response)=&Apache::lonnet::ssi_body($feedurl,%form);
                   if (ref($response)) {
                       if ($response->is_success) {
                           $content = $userview;
                           $content =~ s/\Qonchange="javascript:setSubmittedPart('\E[^\']+\Q');"\E//g;
                           $content =~ s/^\s*[\n\r]+$//;
                           if ($caller eq 'plaintext') {
                               my @lines = split(/[\n\r]+/,$content);
                               my @tosave;
                               my $foilcounter = 0;
                               my @alphabet = ('a'..'z');
                               my $mc_answer;
                               foreach my $line (@lines) {
                                   next if ($line =~ /^\s*$/);
                                   if ($line =~ m{(|\Q<\label>\E)\Q<br />Incorrect:<label>\E}) {
                                       $foilcounter ++;
                                   } elsif ($line =~ m{(|\Q</label>\E)\Q<br />Correct:<b><label>\E}) {
                                       $foilcounter ++;
                                       $mc_answer = $alphabet[$foilcounter-1];
                                   } elsif ($line !~ m{\Q</label>\E(|\Q</b>\E)\Q<br />\E}) {
                                       $line =~ s/^(\s+|\s+)$//g;
                                       $line =~ s{^\Q<b>\E([^<]+)\Q</b>\E$}{1};
                                       $tosave[$foilcounter] .= $line.' ';
                                   }
                                   $content = join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer."\n";
                                   }
                               }
                               if (@tosave) {
                                   my $qtype;
                                   if ($mc_answer) {
                                       $qtype = 'MC';
                                   }
                                   $content = $currdirpath."\t".$title."\t$qtype\t".join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer;
                                   } 
                                   $content .= "\n";
                               }
                           } else {
                               $content = '<html><body>'.$content.'</body></html>';
                           }
                           if (($caller eq 'plaintext') && ($testbank)) {
                               print $testbank $content;
                           }
                       } else {
                           $content = 'Not the owner of this resource';
                       }
                   } else {
                       $content = 'Not the owner of this resource';
                   }
                 $repstatus = 'ok';                  $repstatus = 'ok';
                 $content = 'Not the owner of this resource';  
             }              }
             if ($repstatus eq 'ok') {              if ($repstatus eq 'ok') {
                 print $copiedfile $content;                  print $copiedfile $content;
Line 905  sub extract_media { Line 1011  sub extract_media {
                 $repstatus = 'ok';                  $repstatus = 'ok';
             }              }
         } elsif ($caller eq 'uploaded') {          } elsif ($caller eq 'uploaded') {
   
             $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);              $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);
         }          }
         if ($repstatus eq 'ok') {          if ($repstatus eq 'ok') {
Line 1150  sub docs_change_log { Line 1255  sub docs_change_log {
     &Apache::loncommon::restore_course_settings('docs_log',      &Apache::loncommon::restore_course_settings('docs_log',
                                                 \%saveable_parameters);                                                  \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }      if (!$env{'form.show'}) { $env{'form.show'}=10; }
   # FIXME: internationalization seems wrong here
     my %lt=('hiddenresource' => 'Resources hidden',      my %lt=('hiddenresource' => 'Resources hidden',
     'encrypturl'     => 'URL hidden',      'encrypturl'     => 'URL hidden',
     'randompick'     => 'Randomly pick',      'randompick'     => 'Randomly pick',
Line 1238  sub docs_change_log { Line 1344  sub docs_change_log {
     $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');      $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
     foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {      foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
  if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {   if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
   # FIXME: internationalization seems wrong here
     $r->print('<li>'.      $r->print('<li>'.
       &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',        &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
   $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})    $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
Line 1470  sub handle_edit_cmd { Line 1577  sub handle_edit_cmd {
   
     if ($cmd eq 'del') {      if ($cmd eq 'del') {
  if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&   if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
     ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {      ($url!~/$LONCAPA::assess_page_seq_re/)) {
     &Apache::lonnet::removeuploadedurl($url);      &Apache::lonnet::removeuploadedurl($url);
  } else {   } else {
     &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);      &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
Line 1506  sub handle_edit_cmd { Line 1613  sub handle_edit_cmd {
 }  }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype,
           $supplementalflag,$orderhash)=@_;
     my $container= ($env{'form.pagepath'}) ? 'page'      my $container= ($env{'form.pagepath'}) ? 'page'
                            : 'sequence';                             : 'sequence';
   
Line 1635  sub editor { Line 1743  sub editor {
         $r->print('</div>');          $r->print('</div>');
     }      }
   
     my $output;        my ($to_show,$output);
   
     &Apache::loncommon::start_data_table_count(); #setup a row counter       &Apache::loncommon::start_data_table_count(); #setup a row counter 
     foreach my $res (@LONCAPA::map::order) {      foreach my $res (@LONCAPA::map::order) {
Line 1652  sub editor { Line 1760  sub editor {
     &Apache::loncommon::end_data_table_count();      &Apache::loncommon::end_data_table_count();
           
     if ($shown) {      if ($shown) {
         $r->print(&Apache::loncommon::start_data_table());          $to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll')
                     .&Apache::loncommon::start_data_table(undef,'contentlist');
         if ($allowed) {          if ($allowed) {
             $r->print(&Apache::loncommon::start_data_table_header_row()              $to_show .= &Apache::loncommon::start_data_table_header_row()
                      .'<th colspan="2">'.&mt('Move').'</th>'                       .'<th colspan="2">'.&mt('Move').'</th>'
                      .'<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/) {
                 $->print('<th colspan="4">'.&mt('Settings').'</th>');                  $to_show .= '<th colspan="4">'.&mt('Settings').'</th>';
             }              }
             $r->print(&Apache::loncommon::end_data_table_header_row());              $to_show .= &Apache::loncommon::end_data_table_header_row();
         }          }
         $r->print($output          $to_show .= $output.' '
                  .&Apache::loncommon::end_data_table()                   .&Apache::loncommon::end_data_table()
         );                   .'<br style="line-height:2px;" />'
                    .&Apache::loncommon::end_scrollbox();
     } else {      } else {
         $r->print('<p class="LC_info">'          $to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll')
                    .'<div class="LC_info" id="contentlist">'
                  .&mt('Currently no documents.')                   .&mt('Currently no documents.')
                  .'</p>'                   .'</div>'
         );                   .&Apache::loncommon::end_scrollbox();
       }
       my $tid = 1;
       if ($supplementalflag) {
           $tid = 2;
     }      }
     if ($allowed) {      if ($allowed) {
           $r->print(&generate_edit_table($tid,$orderhash,$to_show));
         &print_paste_buffer($r,$container);          &print_paste_buffer($r,$container);
       } else {
           $r->print($to_show);
     }      }
     return;      return;
 }  }
Line 1703  sub process_file_upload { Line 1821  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>';              $$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</div>';
             return;              return;
         }          }
         my $destination = 'docs/';          my $destination = 'docs/';
Line 1729  sub process_file_upload { Line 1847  sub process_file_upload {
         } else {          } else {
             my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$});              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>';              $$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</div>';
             return;              return;
         }          }
         my $ext='false';          my $ext='false';
Line 1748  sub process_file_upload { Line 1866  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 = '<div class="LC_error" id="uploadfileresult">'.$errtext.'</div>';
             return;              return;
         } else {          } else {
             if ($parseaction eq 'parse' && $mimetype eq 'text/html') {              if ($parseaction eq 'parse' && $mimetype eq 'text/html') {
Line 1775  sub process_file_upload { Line 1893  sub process_file_upload {
                 } else {                  } else {
                     $$upload_output .= &mt('No embedded items identified').'<br />';                      $$upload_output .= &mt('No embedded items identified').'<br />';
                 }                  }
                   $$upload_output = '<div id="uploadfileresult">'.$$upload_output.'</div>';
             }              }
         }          }
     }      }
Line 2081  END Line 2200  END
     } else {      } else {
         $reinit = &mt('(re-initialize course to access)');          $reinit = &mt('(re-initialize course to access)');
     }        }  
     $line.='      $line.='<td>';
   <td>      if ($url=~m{/adm/coursedocs}) {
     '.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').'         $line.='<a href="'.$url.'"><img src="'.$icon.'" alt="" class="LC_icon" /></a>';
   </td>      } elsif ($url) {
   <td>         $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
     '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.$reinit.'</span>').$external."                                               '<img src="'.$icon.'" alt="" class="LC_icon" />',600,500);
   </td>";      } else {
          $line.='<img src="'.$icon.'" alt="" class="LC_icon" />';
       }
       $line.='</td><td>';
       if ($url=~m{/adm/coursedocs}) {
          $line.='<a href="'.$url.'">'.$title.'</a>';
       } elsif ($url) {
          $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
                                                $title,600,500);
       } else {
          $line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>';
       }
       $line.=$external."</td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
        'hd' => 'Hidden',         'hd' => 'Hidden',
Line 2101  END Line 2232  END
     $form_start      $form_start
     <label><input type="checkbox" name="hiddenresource_$orderidx" onclick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>      <label><input type="checkbox" name="hiddenresource_$orderidx" onclick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>
     $form_end      $form_end
   </td>      <br />
   <td class="LC_docs_entry_parameter">  
     $form_start      $form_start
     <label><input type="checkbox" name="encrypturl_$orderidx" onclick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>      <label><input type="checkbox" name="encrypturl_$orderidx" onclick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>
     $form_end      $form_end
   </td>    </td>
   <td class="LC_docs_entry_parameter">$form_start $rand_order_text $form_end</td>    <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end<br />
   <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td>                                        $form_start $rand_order_text $form_end</td>
 ENDPARMS  ENDPARMS
     }      }
     $line.=&Apache::loncommon::end_data_table_row();      $line.=&Apache::loncommon::end_data_table_row();
Line 2513  ENDHEADERS Line 2643  ENDHEADERS
                     $r->print(' <a href="/adm/diff?filename='.                      $r->print(' <a href="/adm/diff?filename='.
       &Apache::lonnet::clutter($root.'.'.$extension).        &Apache::lonnet::clutter($root.'.'.$extension).
       '&versionone='.$prevvers.        '&versionone='.$prevvers.
       '">'.&mt('Diffs').'</a>');        '" target="diffs">'.&mt('Diffs').'</a>');
  }   }
  $r->print('</span><br />');   $r->print('</span><br />');
                 if (++$entries_count % $entries_per_col == 0) {                  if (++$entries_count % $entries_per_col == 0) {
Line 2643  sub startContentScreen { Line 2773  sub startContentScreen {
   
     if ($allowed) {      if ($allowed) {
         $r->print('<li '.(($mode eq 'docs')?' class="active"':'').          $r->print('<li '.(($mode eq 'docs')?' class="active"':'').
                '><a href="/adm/coursedocs?forcestandard=1"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Editor').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');                 ' id="tabbededitor"><a href="/adm/coursedocs?forcestandard=1"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Editor').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
     }      }
       $r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Search').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
       $r->print('<li'.(($mode eq 'courseindex')?' class="active"':'').'><a href="/adm/indexcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Index').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
     $r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').      $r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').
            '><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');             '><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');
     $r->print('</ul>');      $r->print('</ul>');
     $r->print('<div class="LC_Box" style="clear:both;margin:0;">'      $r->print('<div class="LC_DocsBox" style="clear:both;margin:0;" id="contenteditor">'
              .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');               .'<div id="maincoursedoc" style="margin:0 0;padding:0 0">');
     $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');      $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');
 }  }
   
Line 2725  sub handler { Line 2857  sub handler {
 #  #
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['folderpath','pagepath',                                              ['folderpath','pagepath',
                                              'pagesymb','forcesupplement','forcestandard']);                                               'pagesymb','forcesupplement','forcestandard',
                                                'symb','command']);
   
 # standard=1: this is a "new-style" course with an uploaded map as top level  # standard=1: this is a "new-style" course with an uploaded map as top level
 # standard=2: this is a "old-style" course, and there is nothing we can do  # standard=2: this is a "old-style" course, and there is nothing we can do
Line 2748  sub handler { Line 2881  sub handler {
   
     my $script='';      my $script='';
     my $showdoc=0;      my $showdoc=0;
       my $addentries = {};
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
   
   # Do we directly jump somewhere?
   
      if ($env{'form.command'} eq 'direct') {
          my ($mapurl,$id,$resurl);
          if ($env{'form.symb'} eq '') {
              $mapurl = $env{'course.'.$env{'request.course.id'}.'.url'};
          } else {
              ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($env{'form.symb'});
              if ($resurl=~/\.(sequence|page)$/) {
                  $mapurl=$resurl;
              } elsif ($resurl eq 'adm/navmaps') {
                  $mapurl=$env{'course.'.$env{'request.course.id'}.'.url'};
              }
          }
          my $mapresobj;
          my $navmap = Apache::lonnavmaps::navmap->new();
          if (ref($navmap)) {
              $mapresobj = $navmap->getResourceByUrl($mapurl);
          }
          $mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1};
          my $type=$2;
          my $path;
          if (ref($mapresobj)) {
              my $pcslist = $mapresobj->map_hierarchy();
              if ($pcslist ne '') {
                  foreach my $pc (split(/,/,$pcslist)) {
                      next if ($pc <= 1);
                      my $res = $navmap->getByMapPc($pc);
                      if (ref($res)) {
                          my $thisurl = $res->src();
                          $thisurl=~s{^.*/([^/]+)\.\w+$}{$1}; 
                          my $thistitle = $res->title();
                          $path .= '&'.
                                   &Apache::lonhtmlcommon::entity_encode($thisurl).'&'.
                                   &Apache::lonhtmlcommon::entity_encode($thistitle).
                                   ':'.$res->randompick().
                                   ':'.$res->randomout().
                                   ':'.$res->encrypted().
                                   ':'.$res->randomorder();
                      }
                  }
              }
              $path .= '&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
                       &Apache::lonhtmlcommon::entity_encode($mapresobj->title()).
                       ':'.$mapresobj->randompick().
                       ':'.$mapresobj->randomout().
                       ':'.$mapresobj->encrypted().
                       ':'.$mapresobj->randomorder();
          } else {
              my $maptitle = &Apache::lonnet::gettitle($mapurl);
              $path = '&default&...::::'.
                  '&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
                  &Apache::lonhtmlcommon::entity_encode($maptitle).'::::';
          }
          $path = 'default&'.
                  &Apache::lonhtmlcommon::entity_encode('Main Course Documents').
                  $path;
          if ($type eq 'sequence') {
              $env{'form.folderpath'}=$path;
              $env{'form.pagepath'}='';
          } else {
              $env{'form.pagepath'}=$path;
              $env{'form.folderpath'}='';
          }
      }
   
 # Where do we store these for when we come back?  # Where do we store these for when we come back?
     my $stored_folderpath='docs_folderpath';      my $stored_folderpath='docs_folderpath';
     if ($supplementalflag) {      if ($supplementalflag) {
        $stored_folderpath='docs_sup_folderpath';         $stored_folderpath='docs_sup_folderpath';
     }      }
          
 # No folderpath, no pagepath, see if we have something stored  # No folderpath, no pagepath, see if we have something stored
     if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {      if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {
         &Apache::loncommon::restore_course_settings($stored_folderpath,          &Apache::loncommon::restore_course_settings($stored_folderpath,
Line 2791  sub handler { Line 2991  sub handler {
     }       } 
   
 # Store this  # Store this
     if ($allowed) {      &Apache::loncommon::store_course_settings($stored_folderpath,
        &Apache::loncommon::store_course_settings($stored_folderpath,  
                                                 {'pagepath' => 'scalar',                                                  {'pagepath' => 'scalar',
                                                  'folderpath' => 'scalar'});                                                   'folderpath' => 'scalar'});
     }  
   
   
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  my (@folderpath)=split('&',$env{'form.folderpath'});   my (@folderpath)=split('&',$env{'form.folderpath'});
Line 2851  sub handler { Line 3048  sub handler {
     $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");      $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
   
     if ($allowed) {      if ($allowed) {
  $script .= &editing_js($udom,$uname);          my @tabids;
           if ($supplementalflag) {
               @tabids = ('002','ee2','ff2');
           } else {
               @tabids = ('aa1','bb1','cc1','ff1');
               unless ($env{'form.pagepath'}) {
                   unshift(@tabids,'001');
                   push(@tabids,('dd1','ee1'));
               }
           }
           my $tabidstr = join("','",@tabids);
    $script .= &editing_js($udom,$uname).
                      &resize_contentdiv_js($tabidstr);
           $addentries = {
                           onload   => "javascript:resize_contentdiv('contentscroll','1','1');",
                         };
     }      }
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n"      $script = '<script type="text/javascript">'."\n"
Line 2867  sub handler { Line 3079  sub handler {
             href=>"/adm/coursedocs",text=>"$crstype Contents"});              href=>"/adm/coursedocs",text=>"$crstype Contents"});
   
         $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,          $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
                                                  {'force_register' => $showdoc,})                                                   {'force_register' => $showdoc,
                                                     'add_entries'    => $addentries,
                                                    })
                  .&Apache::loncommon::help_open_menu('','',273,'RAT')                   .&Apache::loncommon::help_open_menu('','',273,'RAT')
                  .&Apache::lonhtmlcommon::breadcrumbs(                   .&Apache::lonhtmlcommon::breadcrumbs(
                      'Editing the Table of Contents for your '.$crstype,                       'Editing the Table of Contents for your '.$crstype,
Line 2944  sub handler { Line 3158  sub handler {
                 'sipa' => 'Simple Course Page',                  'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',                  'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',                  'drbx' => 'Drop Box',
                 'scuf' => 'Score Upload Form',                  'scuf' => 'External Scores (handgrade, upload, clicker)',
                 'bull' => 'Discussion Board',                  'bull' => 'Discussion Board',
                 'mypi' => 'My Personal Information Page',                  'mypi' => 'My Personal Information Page',
                 'grpo' => 'Group Portfolio',                  'grpo' => 'Group Portfolio',
Line 2976  FIUP Line 3190  FIUP
  </label>   </label>
 CHBO  CHBO
   
     my $fileuploada = "<input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}";      my $fileuploada = "<br clear='all' /><input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}";
  my $fileuploadform=(<<FUFORM);   my $fileuploadform=(<<FUFORM);
  <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">   <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">
  <input type="hidden" name="active" value="aa" />   <input type="hidden" name="active" value="aa" />
  $fileupload   $fileupload
  <br />   <br />
  $lt{'title'}:<br />   $lt{'title'}:<br />
  <input type="text" size="80" name="comment" />   <input type="text" size="60" name="comment" />
  $uploadtag   $uploadtag
  <input type="hidden" name="cmd" value="upload_default" />   <input type="hidden" name="cmd" value="upload_default" />
  <br />   <br />
  <span class="LC_nobreak">   <span class="LC_nobreak" style="float:left">
  $checkbox   $checkbox
  </span>   </span>
 FUFORM  FUFORM
     $fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>';      $fileuploadform .= $fileuploada.'</form>';
   
  my $simpleeditdefaultform=(<<SEDFFORM);   my $simpleeditdefaultform=(<<SEDFFORM);
  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">   <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
Line 3004  SEDFFORM Line 3218  SEDFFORM
  );   );
  $simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));   $simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));
  $simpleeditdefaultform .=(<<SEDFFORM);   $simpleeditdefaultform .=(<<SEDFFORM);
  <hr />   <hr id="bb_hrule" style="width:0px;text-align:left;margin-left:0" />
  <p>  
  $lt{'copm'}<br />   $lt{'copm'}<br />
  <input type="text" size="40" name="importmap" /><br />   <input type="text" size="40" name="importmap" /><br />
  <span class="LC_nobreak"><input type="button"   <span class="LC_nobreak" style="float:left"><input type="button"
  onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"   onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
  value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />   value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />
  $help{'Load_Map'}</span>   $help{'Load_Map'}</span>
  </p>  
  </form>   </form>
 SEDFFORM  SEDFFORM
   
Line 3196  NROSTFORM Line 3408  NROSTFORM
   
 my $specialdocumentsform;  my $specialdocumentsform;
 my @specialdocumentsforma;  my @specialdocumentsforma;
   my $gradingform;
   my @gradingforma;
   my $communityform;
   my @communityforma;
 my $newfolderform;  my $newfolderform;
 my $newfolderb;  my $newfolderb;
   
        unless ($env{'form.pagepath'}) {   my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
    my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');  
   
  my $newpageform=(<<NPFORM);   my $newpageform=(<<NPFORM);
  <form action="/adm/coursedocs" method="post" name="newpage">   <form action="/adm/coursedocs" method="post" name="newpage">
Line 3247  NGFFORM Line 3462  NGFFORM
  @specialdocumentsforma=(   @specialdocumentsforma=(
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'"  onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'"  onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},
  );          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},
           );
           $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
   
   
         my @importdoc = (          my @importdoc = (
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform},
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);
         $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;          $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr id="cc_hrule" style="width:0px;text-align:left;margin-left:0" />' . $fileuploadform;
   
  push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},          @gradingforma=(
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},  
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},          );
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},          $gradingform = &create_form_ul(&create_list_elements(@gradingforma));
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},  
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);          @communityforma=(
          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},
           {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},
           {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
           {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},
           {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
           );
           $communityform = &create_form_ul(&create_list_elements(@communityforma));
   
  $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));  
       }  
   
 if($env{'form.pagepath'}) {  
   
  @specialdocumentsforma=(  
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},  
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}  
  );  
  $specialdocumentsform= &create_form_ul(&create_list_elements(@specialdocumentsforma));  
 }  
   
 my @tools = (  my @tools = (
 # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},
Line 3286  my @tools = ( Line 3501  my @tools = (
 my %orderhash = (  my %orderhash = (
                 'aa' => ['Import Documents',$fileuploadform],                  'aa' => ['Import Documents',$fileuploadform],
                 'bb' => ['Published Resources',$simpleeditdefaultform],                  'bb' => ['Published Resources',$simpleeditdefaultform],
                 'cc' => ['Special Documents',$specialdocumentsform],                  'cc' => ['Grading Resources',$gradingform],
  'dd' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],   'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );                  );
 unless($env{'form.pagepath'}) {  unless ($env{'form.pagepath'}) {
     $orderhash{'00'} = ['Newfolder',$newfolderform];      $orderhash{'00'} = ['Newfolder',$newfolderform];
       $orderhash{'dd'} = ['Community Resources',$communityform];
       $orderhash{'ee'} = ['Special Documents',$specialdocumentsform];
 }  }
   
  $hadchanges=0;   $hadchanges=0;
        unless ($supplementalflag) {         unless ($supplementalflag) {
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                                 $supplementalflag,\%orderhash);
           if ($error) {            if ($error) {
              $r->print('<p><span class="LC_error">'.$error.'</span></p>');               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }            }
Line 3304  unless($env{'form.pagepath'}) { Line 3522  unless($env{'form.pagepath'}) {
           }            }
   
           &changewarning($r,'');            &changewarning($r,'');
           $r->print(&generate_edit_table('1',\%orderhash));  
         }          }
       }
  }  
   
 # Supplemental documents start here  # Supplemental documents start here
   
Line 3401  my @supimportdoc = ( Line 3617  my @supimportdoc = (
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />'   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />'
             =>$supnewextform},              =>$supnewextform},
         );          );
 $supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr/>' . $supupdocform;  $supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr id="ee_hrule" style="width:0px;text-align:left;margin-left:0" />' . $supupdocform;
 my %suporderhash = (  my %suporderhash = (
  '00' => ['Supnewfolder', $supnewfolderform],   '00' => ['Supnewfolder', $supnewfolderform],
                 'ee' => ['Import Documents',$supupdocform],                  'ee' => ['Import Documents',$supupdocform],
                 'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))]                  'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))]
                 );                  );
         if ($supplementalflag) {          if ($supplementalflag) {
            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);             my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                                  $supplementalflag,\%suporderhash);
            if ($error) {             if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');                $r->print('<p><span class="LC_error">'.$error.'</span></p>');
            }             }
            $r->print(&generate_edit_table('2',\%suporderhash));  
         }          }
     } elsif ($supplementalflag) {      } elsif ($supplementalflag) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                               $supplementalflag);
         if ($error) {          if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');              $r->print('<p><span class="LC_error">'.$error.'</span></p>');
         }          }
Line 3518  sub generate_admin_options { Line 3735  sub generate_admin_options {
   
   
 sub generate_edit_table {  sub generate_edit_table {
     my ($tid,$orderhash_ref) = @_;      my ($tid,$orderhash_ref,$to_show) = @_;
     return unless(ref($orderhash_ref) eq 'HASH');      return unless(ref($orderhash_ref) eq 'HASH');
     my %orderhash = %{$orderhash_ref};      my %orderhash = %{$orderhash_ref};
     my $form;      my $form;
Line 3527  sub generate_edit_table { Line 3744  sub generate_edit_table {
     if($env{'form.active'} ne ''){      if($env{'form.active'} ne ''){
         $activetab = $env{'form.active'};          $activetab = $env{'form.active'};
     }      }
     $form = '<div class="LC_Box" style="margin-right:0">';      $form = '<div class="LC_Box" style="margin:0;">'.
     $form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">';               '<ul id="navigation'.$tid.'" class="LC_TabContent">';
     foreach my $name (sort(keys(%orderhash))){      foreach my $name (reverse(sort(keys(%orderhash)))) {
         if($name ne '00'){          if($name ne '00'){
             if($activetab eq '' || $activetab ne $name){              if($activetab eq '' || $activetab ne $name){
                $active = '';                 $active = '';
             }elsif($activetab eq $name){              }elsif($activetab eq $name){
                $active = 'class="active"';                 $active = 'class="active"';
             }              }
             $form .= '<li '.$active              $form .= '<li style="float:right" '.$active
                 .' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"'                  .' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"'
                 .' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>';                  .' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>';
         } else {          } else {
     $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';      $form .= '<li '.$active.' style="float:right">'.${$orderhash{$name}}[1].'</li>';
   
  }   }
     }      }
     $form .= '</ul>';      $form .= '</ul>';
     $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">';      $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; overflow: hidden; clear:right">';
   
       if ($to_show ne '') {
           $form .= '<div style="padding:0;margin:0;float:left">'.$to_show.'</div>';
       }
     foreach my $field (keys(%orderhash)){      foreach my $field (keys(%orderhash)){
  if($field ne '00'){   if($field ne '00'){
             if($activetab eq '' || $activetab ne $field){              if($activetab eq '' || $activetab ne $field){
                 $active = 'style="display: none;"';                  $active = 'style="display: none;float:left"';
             }elsif($activetab eq $field){              }elsif($activetab eq $field){
                 $active = 'style="display:block;"';                  $active = 'style="display:block;float:left"';
             }              }
             $form .= '<div id="'.$field.$tid.'"'              $form .= '<div id="'.$field.$tid.'"'
                     .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]                      .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
Line 3571  sub editing_js { Line 3792  sub editing_js {
                                           t_mnf => 'New Folder',                                            t_mnf => 'New Folder',
                                           p_mnp => 'Name of New Page',                                            p_mnp => 'Name of New Page',
                                           t_mnp => 'New Page',                                            t_mnp => 'New Page',
                                           p_mxu => 'Title for the Uploaded Score',                                            p_mxu => 'Title for the External Score',
                                           p_msp => 'Name of Simple Course Page',                                            p_msp => 'Name of Simple Course Page',
                                           p_msb => 'Title for the Problem',                                            p_msb => 'Title for the Problem',
                                           p_mdb => 'Title for the Drop Box',                                            p_mdb => 'Title for the Drop Box',
Line 3830  function showPage(current, pageId, nav, Line 4051  function showPage(current, pageId, nav,
  current.className = 'active';   current.className = 'active';
  currentData = document.getElementById(pageId);   currentData = document.getElementById(pageId);
  currentData.style.display = 'block';   currentData.style.display = 'block';
           activeTab = pageId;
         if (nav == 'mainnav') {          if (nav == 'mainnav') {
             var storedpath = "$docs_folderpath";              var storedpath = "$docs_folderpath";
             if (storedpath == '') {              if (storedpath == '') {
Line 3864  function showPage(current, pageId, nav, Line 4086  function showPage(current, pageId, nav,
                 }                  }
             }              }
         }          }
           resize_contentdiv('contentscroll','1','0');
  return false;   return false;
 }  }
   
Line 3876  function injectData(current, hiddenField Line 4099  function injectData(current, hiddenField
   
 ENDNEWSCRIPT  ENDNEWSCRIPT
 }  }
   
   sub resize_contentdiv_js {
       my ($tabidstr) = @_;
       my $viewport_js = &Apache::loncommon::viewport_geometry_js();
       return <<ENDRESIZESCRIPT;
   
   window.onresize=resizeContentEditor;
   
   var activeTab;
   
   $viewport_js
   
   function resize_contentdiv(scrollboxname,chkw,chkh) {
       var scrollboxid = 'div_'+scrollboxname;
       var scrolltableid = 'table_'+scrollboxname;
       var scrollbox;
       var scrolltable;
   
       if (document.getElementById("contenteditor") == null) {
           return;
       }
   
       if (document.getElementById(scrollboxid) == null) {
           return;
       } else {
           scrollbox = document.getElementById(scrollboxid);
       }
   
       if (document.getElementById(scrolltableid) == null) {
           return;
       } else {
           scrolltable = document.getElementById(scrolltableid);
       }
   
       init_geometry();
       var vph = Geometry.getViewportHeight();
       var vpw = Geometry.getViewportWidth();
   
       var alltabs = ['$tabidstr'];
       var listwchange;
       if (chkw == 1) {
           var contenteditorw = document.getElementById("contenteditor").offsetWidth;
           var contentlistw;
           var contentlistid = document.getElementById("contentlist");
           if (contentlistid != null) {
               contentlistw = document.getElementById("contentlist").offsetWidth;
           }
           var contentlistwstart = contentlistw;
   
           var scrollboxw = scrollbox.offsetWidth;
           var scrollboxscrollw = scrollbox.scrollWidth;
   
           var offsetw = parseInt(vpw * 0.015);
           var paddingw = parseInt(vpw * 0.09);
   
           var minscrollboxw = 250;
   
           var maxtabw = 0;
           var actabw = 0;
           for (var i=0; i<alltabs.length; i++) {
               if (activeTab == alltabs[i]) {
                   actabw = document.getElementById(alltabs[i]).offsetWidth;
                   if (actabw > maxtabw) {
                       maxtabw = actabw;
                   }
               } else {
                   if (document.getElementById(alltabs[i]) != null) {
                       var thistab = document.getElementById(alltabs[i]);
                       thistab.style.visibility = 'hidden';
                       thistab.style.display = 'block';
                       var tabw = document.getElementById(alltabs[i]).offsetWidth;
                       thistab.style.display = 'none';
                       thistab.style.visibility = '';
                       if (tabw > maxtabw) {
                           maxtabw = tabw;
                       }
                   }
               }
           }
   
           if (maxtabw > 0) {
               var newscrollboxw;
               if (maxtabw+paddingw+scrollboxscrollw<contenteditorw) {
                   newscrollboxw = contenteditorw-paddingw-maxtabw;
                   if (newscrollboxw < minscrollboxw) {
                       newscrollboxw = minscrollboxw;
                   }
                   scrollbox.style.width = newscrollboxw+"px";
                   if (newscrollboxw != scrollboxw) {
                       var newcontentlistw = newscrollboxw-offsetw;
                       contentlistid.style.width = newcontentlistw+"px";
                   }
               } else {
                   newscrollboxw = contenteditorw-paddingw-maxtabw;
                   if (newscrollboxw < minscrollboxw) {
                       newscrollboxw = minscrollboxw;
                   }
                   scrollbox.style.width = newscrollboxw+"px";
                   if (newscrollboxw != scrollboxw) {
                       var newcontentlistw = newscrollboxw-offsetw;
                       contentlistid.style.width = newcontentlistw+"px";
                   }
               }
   
               if (newscrollboxw != scrollboxw) {
                   var newscrolltablew = newscrollboxw+offsetw;
                   scrolltable.style.width = newscrolltablew+"px";
               }
           }
   
           if (contentlistid.offsetWidth != contentlistwstart) {
               listwchange = 1;
           }
   
           if (activeTab == 'cc1') {
               if (document.getElementById('cc_hrule') != null) {
                   document.getElementById('cc_hrule').style.width=actabw+"px";
               }
           } else {
               if (activeTab == 'bb1') {
                   if (document.getElementById('bb_hrule') != null) {
                       document.getElementById('bb_hrule').style.width=actabw+"px";
                   }
               } else {
                   if (activeTab == 'ee2') {
                       if (document.getElementById('ee_hrule') != null) {
                           document.getElementById('ee_hrule').style.width=actabw+"px";
                       }
                   }
               }
           }
       }
       if ((chkh == 1) || (listwchange)) {
           var primaryheight = document.getElementById("LC_nav_bar").offsetHeight;
           var secondaryheight = document.getElementById("LC_secondary_menu").offsetHeight;
           var crumbsheight = document.getElementById("LC_breadcrumbs").offsetHeight;
           var dccidheight = document.getElementById("dccid").offsetHeight;
   
           var uploadresultheight = 0;
           if (document.getElementById("uploadfileresult") != null) {
               uploadresultheight = document.getElementById("uploadfileresult").offsetHeight;
           }
           var tabbedheight = document.getElementById("tabbededitor").offsetHeight;
           var contenteditorheight = document.getElementById("contenteditor").offsetHeight;
           var scrollboxheight = scrollbox.offsetHeight;
           var scrollboxscrollheight = scrollbox.scrollHeight;
           var freevspace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight);
   
           var minvscrollbox = 200;
           var offsetv = 20;
           var newscrollboxheight;
           if (freevspace < 0) {
               newscrollboxheight = scrollboxheight+freevspace-offsetv;
               if (newscrollboxheight < minvscrollbox) {
                   newscrollboxheight = minvscrollbox;
               }
               scrollbox.style.height = newscrollboxheight + "px";
           } else {
               if (scrollboxscrollheight > scrollboxheight) {
                   if (freevspace > offsetv) {
                       newscrollboxheight = scrollboxheight+freevspace-offsetv;
                       if (newscrollboxheight < minvscrollbox) {
                           newscrollboxheight = minvscrollbox;
                       }
                       scrollbox.style.height = newscrollboxheight+"px";
                   }
               }
           }
           scrollboxheight = scrollbox.offsetHeight;
           var contentlistheight = document.getElementById("contentlist").offsetHeight;
   
           if (scrollboxscrollheight <= scrollboxheight) {
               if ((contentlistheight+offsetv)<scrollboxheight) {
                   newscrollheight = contentlistheight+offsetv;
                   scrollbox.style.height = newscrollheight+"px";
               }
           }
       }
       return;
   }
   
   function resizeContentEditor() {
       var timer;
       clearTimeout(timer)
       timer=setTimeout('resize_contentdiv("contentscroll","1","1")',500);
   }
   
   ENDRESIZESCRIPT
       return;
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.446  
changed lines
  Added in v.1.470


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