Diff for /loncom/interface/londocs.pm between versions 1.418 and 1.450

version 1.418, 2010/02/02 01:28:10 version 1.450, 2011/01/18 00:22:02
Line 120  sub dumpbutton { Line 120  sub dumpbutton {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     if ($home) {      if ($home) {
  my $link = "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \"".&mt('Dump '.$crstype.' DOCS to Construction Space')."\")'>".&mt('Dump '.$crstype.' DOCS to Construction Space')."</a>";          my $link =
  return $link.' '.              "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \""
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').'<br />';             .&mt('Dump '.$crstype.' Documents to Construction Space')
              ."\")'>"
              .&mt('Dump '.$crstype.' Documents to Construction Space')
              .'</a>';
           return
               $link.' '
              .&Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs')
              .'<br />';
     } else {      } else {
  return &mt('Dump '.$crstype.          return
  ' DOCS to Construction Space: available on other servers');              &mt('Dump '.$crstype.' Documents to Construction Space: available on other servers');
     }      }
 }  }
   
Line 140  sub clean { Line 147  sub clean {
 sub dumpcourse {  sub dumpcourse {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' DOCS to Construction Space').      $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Documents to Construction Space').
       '<form name="dumpdoc" action="" method="post">');        '<form name="dumpdoc" action="" method="post">');
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' DOCS to Construction Space'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' Documents to Construction Space'));
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
     unless ($home) { return ''; }      unless ($home) { return ''; }
     my $origcrsid=$env{'request.course.id'};      my $origcrsid=$env{'request.course.id'};
Line 253  sub dumpcourse { Line 260  sub dumpcourse {
  $r->print(&Apache::loncommon::end_data_table());   $r->print(&Apache::loncommon::end_data_table());
  &untiehash();   &untiehash();
  $r->print(   $r->print(
   '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype DOCS").'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype Documents").'" /></p></form>');
     }      }
 }  }
   
Line 261  sub dumpcourse { Line 268  sub dumpcourse {
   
 sub exportbutton {  sub exportbutton {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     return "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".      return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';
 }  }
   
Line 1514  sub editor { Line 1521  sub editor {
         $LONCAPA::map::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
   
     my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order);      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
     if ($allowed) {  
         ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =  
     &breadcrumbs($allowed,$crstype);      &breadcrumbs($allowed,$crstype);
         $r->print($breadcrumbtrail);          $r->print($breadcrumbtrail);
     } else {  
       unless ($allowed) {
         $randompick = -1;          $randompick = -1;
     }      }
   
Line 1600  sub editor { Line 1606  sub editor {
     my $shown=0;      my $shown=0;
     if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {      if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {
  $r->print('<div class="LC_Box">'.   $r->print('<div class="LC_Box">'.
           '<p>'.&mt('Parameters:').            '<ol class="LC_docs_parameters"><li class="LC_docs_parameters_title">'.&mt('Parameters:').'</li>'.
           '<ul>'.  
   ($randompick>=0?'<li>'.&mt('randomly pick [quant,_1,resource]',$randompick).'</li>':'').    ($randompick>=0?'<li>'.&mt('randomly pick [quant,_1,resource]',$randompick).'</li>':'').
   ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').    ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
   ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').    ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
   ($is_random_order?'<li>'.&mt('random order').'</li>':'').    ($is_random_order?'<li>'.&mt('random order').'</li>':'').
   '</ul></p>');    '</ol>');
         if ($randompick>=0) {          if ($randompick>=0) {
             $r->print('<p class="LC_warning">'              $r->print('<p class="LC_warning">'
                  .&mt('Caution: this folder is set to randomly pick a subset'                   .&mt('Caution: this folder is set to randomly pick a subset'
Line 1630  sub editor { Line 1635  sub editor {
         $r->print('</div>');          $r->print('</div>');
     }      }
   
     my $output;      my $output;  
   
       &Apache::loncommon::start_data_table_count(); #setup a row counter 
     foreach my $res (@LONCAPA::map::order) {      foreach my $res (@LONCAPA::map::order) {
         my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);          my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
         $name=&LONCAPA::map::qtescape($name);          $name=&LONCAPA::map::qtescape($name);
Line 1642  sub editor { Line 1649  sub editor {
         $idx++;          $idx++;
         $shown++;          $shown++;
     }      }
       &Apache::loncommon::end_data_table_count();
       
     if ($shown) {      if ($shown) {
         $r->print(&Apache::loncommon::start_data_table());          $r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px')
                    .&Apache::loncommon::start_data_table());
         if ($allowed) {          if ($allowed) {
             $r->print(&Apache::loncommon::start_data_table_header_row()              $r->print(&Apache::loncommon::start_data_table_header_row()
                      .'<th colspan="2">'.&mt('Move').'</th>'                       .'<th colspan="2">'.&mt('Move').'</th>'
Line 1656  sub editor { Line 1666  sub editor {
         }          }
         $r->print($output          $r->print($output
                  .&Apache::loncommon::end_data_table()                   .&Apache::loncommon::end_data_table()
                    .&Apache::loncommon::end_scrollbox()
         );          );
     } else {      } else {
         $r->print('<p class="LC_info">'          $r->print('<p class="LC_info">'
Line 1672  sub editor { Line 1683  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;      my ($parseaction,$showupload,$nextphase,$mimetype);
    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 1695  sub process_file_upload { Line 1705  sub process_file_upload {
             $LONCAPA::map::resources[1]='';              $LONCAPA::map::resources[1]='';
         }          }
         if ($fatal) {          if ($fatal) {
             return 'failed';              $$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;
         }          }
         my $destination = 'docs/';          my $destination = 'docs/';
         if ($folder =~ /^supplemental/) {          if ($folder =~ /^supplemental/) {
Line 1706  sub process_file_upload { Line 1717  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 coursedoc flag  # this is for a course, not a user, so set context to coursedoc.
 # 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',1,$destination,          my $url=&Apache::lonnet::userfileupload('uploaddoc','coursedoc',$destination,
  $parseaction,$allfiles,   $parseaction,$allfiles,
  $codebase);   $codebase,undef,undef,undef,undef,
                                                   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 1729  sub process_file_upload { Line 1750  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 'failed';              return;
         } else {          } else {
             if ($parseaction eq 'parse') {              if ($parseaction eq 'parse' && $mimetype eq 'text/html') {
                   $$upload_output = $showupload;
                 my $total_embedded = scalar(keys(%{$allfiles}));                  my $total_embedded = scalar(keys(%{$allfiles}));
                 if ($total_embedded > 0) {                  if ($total_embedded > 0) {
                     my $num = 0;                      my $uploadphase = 'upload_embedded';
     my $state = '                      my $primaryurl = &HTML::Entities::encode($url,'<>&"');
    <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />      my $state = &embedded_form_elems($uploadphase,$primaryurl,$newidx); 
    <input type="hidden" name="cmd" value="upload_embedded" />                      my ($embedded,$num) = 
    <input type="hidden" name="newidx" value="'.$newidx.'" />                          &Apache::loncommon::ask_for_embedded_content(
    <input type="hidden" name="primaryurl" value="'.&escape($url).'" />                              '/adm/coursedocs',$state,$allfiles,$codebase,{'docs_url' => $url});
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';                      if ($embedded) {
     $phase_status = 'phasetwo';                          if ($num) {
                               $$upload_output .=
                     $$upload_output .=           '<p>'.&mt('This file contains embedded multimedia objects, which need to be uploaded.').'</p>'.$embedded;
  'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.                              $nextphase = $uploadphase;
  &Apache::loncommon::ask_for_embedded_content(                          } else {
                             '/adm/coursedocs',$state,$allfiles,$codebase);                              $$upload_output .= $embedded;
                           }
                       } else {
                           $$upload_output .= &mt('Embedded item(s) already present, so no additional upload(s) required').'<br />';
                       }
                 } else {                  } else {
                     $$upload_output .= 'No embedded items identified<br />';                      $$upload_output .= &mt('No embedded items identified').'<br />';
                 }                  }
             }              }
         }          }
     }      }
     return $phase_status;      return $nextphase;
 }  
   
 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 1838  sub entryline { Line 1845  sub entryline {
     }      }
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $type = $container = 'page';          $type = $container = 'page';
         $esc_path=&escape($path = $env{'form.pagepath'});          $esc_path=&escape($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 2232  sub list_symbs { Line 2239  sub list_symbs {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Symb List'));      $r->print(&Apache::loncommon::start_page('Symb List'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));
       &startContentScreen($r,'tools');
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.          $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.
Line 2242  sub list_symbs { Line 2250  sub list_symbs {
     } else {      } else {
         $r->print("<pre>\n");          $r->print("<pre>\n");
         foreach my $res ($navmap->retrieveResources()) {          foreach my $res ($navmap->retrieveResources()) {
     $r->print($res->compTitle()."\t".$res->symb()."\n");              $r->print($res->compTitle()."\t".$res->symb()."\n");
         }          }
         $r->print("\n</pre>\n");          $r->print("\n</pre>\n");
     }      }
     $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');  
 }  }
   
   
 sub verifycontent {  sub verifycontent {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
    my $loaderror=&Apache::lonnet::overloaderror($r);  
    if ($loaderror) { return $loaderror; }  
    $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));     $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));
      &startContentScreen($r,'tools');
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
Line 2265  sub verifycontent { Line 2271  sub verifycontent {
        if ($hash{$key}=~/\.(page|sequence)$/) {         if ($hash{$key}=~/\.(page|sequence)$/) {
    if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {     if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {
        $r->print('<hr /><span class="LC_error">'.         $r->print('<hr /><span class="LC_error">'.
  &mt('The following sequence or page is included more than once in your '.$crstype.': ').   &mt('The following sequence or page is included more than once in your '.$crstype.':').' '.
  &unescape($hash{$key}).'</span><br />'.   &unescape($hash{$key}).'</span><br />'.
  &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));   &mt('Note that grading records for problems included in this sequence or folder will overlap.').'<hr />');
    }     }
        }         }
        if (($key=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$key})})) {         if (($key=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$key})})) {
Line 2275  sub verifycontent { Line 2281  sub verifycontent {
        }         }
    }     }
    &untiehash();     &untiehash();
    $r->print('<h1>'.&mt('Done').'.</h1>'.'<a href="/adm/coursedocs">'.     $r->print('<p class="LC_success">'.&mt('Done').'</p>');
      &mt('Return to DOCS').'</a>');  
 }  }
   
   
Line 2291  sub checkversions { Line 2296  sub checkversions {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));      $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));      $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));
       &startContentScreen($r,'tools');
   
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 2468  ENDHEADERS Line 2475  ENDHEADERS
 # Set version  # Set version
     $r->print(&Apache::loncommon::select_form($setversions{$linkurl},      $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
       'set_version_'.$linkurl,        'set_version_'.$linkurl,
       ('select_form_order' =>        {'select_form_order' =>
        ['',1..$currentversion,'mostrecent'],         ['',1..$currentversion,'mostrecent'],
        '' => '',         '' => '',
        'mostrecent' => &mt('most recent'),         'mostrecent' => &mt('most recent'),
        map {$_,$_} (1..$currentversion))));         map {$_,$_} (1..$currentversion)}));
     $r->print('</span></td></tr><tr><td></td>');      $r->print('</span></td></tr><tr><td></td>');
     my $lastold=1;      my $lastold=1;
     for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {      for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
Line 2526  ENDHEADERS Line 2533  ENDHEADERS
  }   }
     }      }
     $r->print('</table></form>');      $r->print('</table></form>');
     $r->print('<h1>'.&mt('Done').'.</h1>');      $r->print('<p class="LC_success">'.&mt('Done').'</p>');
   
     &untiehash();      &untiehash();
 }  }
Line 2601  sub init_breadcrumbs { Line 2608  sub init_breadcrumbs {
     bug=>'Instructor Interface'});      bug=>'Instructor Interface'});
 }  }
   
   # subroutine to list form elements
   sub create_list_elements {
      my @formarr = @_;
      my $list = '';
      for my $button (@formarr){
           for my $picture(keys %$button) {
               $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
           }
      }
      return $list;
   }
   
   # subroutine to create ul from list elements
   sub create_form_ul {
      my $list = shift;
      my $ul = &Apache::lonhtmlcommon::htmltag('ul',$list, {class => 'LC_ListStyleNormal'});
      return $ul;
   }
   
   #
   # Start tabs
   #
   
   sub startContentScreen {
       my ($r,$mode)=@_;
       $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
       $r->print('<li'.(($mode eq 'navmaps')?' class="active"':'').'><a href="/adm/navmaps"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Overview').'&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
   
       my $active = '';
   # does this user have privileges to modify docs?
       my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
   
       my $onclick;
       my $href;
   
       if ($allowed) {
           $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>');
       }
       $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"':'').
              '><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');
       $r->print('</ul>');
       $r->print('<div class="LC_Box" style="clear:both;margin:0;">'
                .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
       $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');
   }
   
   #
   # End tabs
   #
   
   sub endContentScreen {
      my ($r)=@_;
      $r->print('</div></div></div>');
   }
   
   sub supplemental_base {
       return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Documents'));
   }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 2611  sub handler { Line 2677  sub handler {
     return OK if $r->header_only;      return OK if $r->header_only;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
   
   #
 # --------------------------------------------- Initialize help topics for this  # --------------------------------------------- Initialize help topics for this
     foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',      foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',
                'Adding_External_Resource','Navigate_Content',                 'Adding_External_Resource','Navigate_Content',
Line 2650  sub handler { Line 2716  sub handler {
       &init_breadcrumbs('versions','Check/Set Resource Versions');        &init_breadcrumbs('versions','Check/Set Resource Versions');
       &checkversions($r);        &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {    } elsif ($allowed && $env{'form.dumpcourse'}) {
       &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space');        &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' Documents to Construction Space');
       &dumpcourse($r);        &dumpcourse($r);
   } elsif ($allowed && $env{'form.exportcourse'}) {    } elsif ($allowed && $env{'form.exportcourse'}) {
       &init_breadcrumbs('exportcourse','IMS Export');        &init_breadcrumbs('exportcourse','IMS Export');
       &exportcourse($r);        &exportcourse($r);
   } else {    } else {
 # is this a standard course?  #
   # Done catching special calls
   # The whole rest is for course and supplemental documents
   # Get the parameters that may be needed
   #
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               ['folderpath','pagepath',
                                                'pagesymb','forcesupplement','forcestandard']);
   
   # 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
   
     my $standard=($env{'request.course.uri'}=~/^\/uploaded\//);      my $standard=($env{'request.course.uri'}=~/^\/uploaded\//);
     my $forcestandard = 0;  
     my $forcesupplement;  # Decide whether this should display supplemental or main content
   # supplementalflag=1: show supplemental documents
   # supplementalflag=0: show standard documents
   
   
       my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
       if (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'} eq "" || ($env{'form.pagepath'})) {
          $supplementalflag=0;
       }
       if ($env{'form.forcesupplement'}) { $supplementalflag=1; }
       if ($env{'form.forcestandard'})   { $supplementalflag=0; }
       unless ($allowed) { $supplementalflag=1; }
       unless ($standard) { $supplementalflag=1; }
   
     my $script='';      my $script='';
     my $showdoc=0;      my $showdoc=0;
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
   
   # Where do we store these for when we come back?
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      my $stored_folderpath='docs_folderpath';
     ['folderpath','pagepath',      if ($supplementalflag) {
      'pagesymb']);         $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('docs_folderpath',          &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'folderpath' => 'scalar'});                                                {'folderpath' => 'scalar'});
     }      }
      
   # If we are not allowed to make changes, all we can see are supplemental docs
     if (!$allowed) {      if (!$allowed) {
         unless($env{'form.folderpath'} =~ /^supplemental/) {          $env{'form.pagepath'}='';
             $env{'form.folderpath'} = '';          unless ($env{'form.folderpath'} =~ /^supplemental/) {
               $env{'form.folderpath'} = &supplemental_base();
         }          }
     }      }
   # If we still not have a folderpath, see if we can resurrect at pagepath
     if (!$env{'form.folderpath'} && $allowed) {      if (!$env{'form.folderpath'} && $allowed) {
         &Apache::loncommon::restore_course_settings('docs_folderpath',          &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'pagepath' => 'scalar'});                                                {'pagepath' => 'scalar'});
     }      }
     if ($env{'form.pagepath'}) {  # Make the zeroth entry in supplemental docs page paths, so we can get to top level
        $env{'form.folderpath'}='';  
     }  
     if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {      if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {
         $env{'form.folderpath'} = 'supplemental&'.          $env{'form.folderpath'} = &supplemental_base()
                                   &escape(&mt('Supplemental '.$crstype.' Documents')).'&'.                                    .'&'.
                                   $env{'form.folderpath'};                                    $env{'form.folderpath'};
     }      }
     &Apache::loncommon::store_course_settings('docs_folderpath',  # If after all of this, we still don't have any paths, make them
       unless (($env{'form.pagepath'}) || ($env{'form.folderpath'})) {
          if ($supplementalflag) {
             $env{'form.folderpath'}=&supplemental_base();
          } else {
             $env{'form.folderpath'}='default';
          }
       } 
   
   # Store this
       &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'});
  $env{'form.foldername'}=&unescape(pop(@folderpath));   $env{'form.foldername'}=&unescape(pop(@folderpath));
Line 2705  sub handler { Line 2809  sub handler {
         $env{'form.pagename'}=&unescape(pop(@pagepath));          $env{'form.pagename'}=&unescape(pop(@pagepath));
         $env{'form.folder'}=pop(@pagepath);          $env{'form.folder'}=pop(@pagepath);
         $containertag = '<input type="hidden" name="pagepath" value="" />'.          $containertag = '<input type="hidden" name="pagepath" value="" />'.
     '<input type="hidden" name="pagesymb" value="" />';                  '<input type="hidden" name="pagesymb" value="" />';
         $uploadtag = '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.          $uploadtag = 
     '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />';              '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.
       '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />'.
               '<input type="hidden" name="folderpath" value="" />';
       } else {
           my $folderpath=$env{'form.folderpath'};
           if (!$folderpath) {
               if ($env{'form.folder'} eq '' ||
                   $env{'form.folder'} eq 'supplemental') {
                   $folderpath='default&'.
                       &escape(&mt('Main '.$crstype.' Documents'));
               }
           }
           $containertag = '<input type="hidden" name="folderpath" value="" />';
           $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';
     }      }
     if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {      if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
        $showdoc='/'.$1;         $showdoc='/'.$1;
Line 2715  sub handler { Line 2832  sub handler {
     if ($showdoc) { # got called in sequence from course      if ($showdoc) { # got called in sequence from course
  $allowed=0;    $allowed=0; 
     } else {      } else {
        if (($env{'form.folder'}=~/^(?:group|default)_/) ||  
           ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {  
            $forcestandard = 1;  
        }  
        $forcesupplement=($env{'form.folder'}=~/^supplemental_/);  
   
        if ($allowed) {         if ($allowed) {
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);           &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');           $script=&Apache::lonratedt::editscript('simple');
        }         }
     }      }
   
 # subroutine to list form elements  
 sub create_list_elements {  
    my @formarr = @_;   
    my $list = '';  
    for my $button (@formarr){  
  for my $picture(keys %$button) {  
  #my $link = Apache::lonhtmlcommon::htmltag('a' ,$button->{$picture}, {href => "test"});   
  $list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});  
  }  
    }  
    return $list;  
 }  
   
 # subroutine to create ul from list elements  
 sub create_form_ul {  
    my $list = shift;  
    my $ul = Apache::lonhtmlcommon::htmltag('ul',$list, {class => 'LC_ListStyleNormal'});  
    return $ul;  
 }  
   
 # get course data  # get course data
     my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};      my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};      my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
Line 2772  sub create_form_ul { Line 2863  sub create_form_ul {
   
     # Breadcrumbs      # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     if ($allowed) {      unless ($showdoc) {
         &Apache::lonhtmlcommon::add_breadcrumb({          &Apache::lonhtmlcommon::add_breadcrumb({
             href=>"/adm/coursedocs",text=>"$crstype Editor"});              href=>"/adm/coursedocs",text=>"$crstype Contents"});
   
         $r->print(&Apache::loncommon::start_page("$crstype Editor", $script,          $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
                                                  {'force_register' => $showdoc,})                                                   {'force_register' => $showdoc,})
                  .&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,
                      'Docs_Adding_Course_Doc')                       'Docs_Adding_Course_Doc')
         );          );
     } elsif ($showdoc) {      } else {
         $r->print(&Apache::loncommon::start_page("$crstype documents",undef,          $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
                                                 {'force_register' => $showdoc,}));                                                  {'force_register' => $showdoc,}));
     } else {  
         my $folder=$env{'form.folder'};  
         if ($folder eq '' || $folder eq 'supplemental') {  
             $env{'form.folderpath'} = 'supplemental&'.  
                                       &escape(&mt('Supplemental '.$crstype.' Documents'));  
         }  
         my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);  
         $r->print(&Apache::loncommon::start_page("Supplemental documents").  
                   $breadcrumbtrail);  
     }      }
   
   my %allfiles = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output);    my ($upload_result,$upload_output,$uploadphase);
   if ($allowed) {    if ($allowed) {
       if (($env{'form.uploaddoc.filename'}) &&        if (($env{'form.uploaddoc.filename'}) &&
   ($env{'form.cmd'}=~/^upload_(\w+)/)) {    ($env{'form.cmd'}=~/^upload_(\w+)/)) {
 # Process file upload - phase one - upload and parse primary file.            my $context = $1; 
             # 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();
   }    }
           if ($upload_result eq 'phasetwo') {            $r->print($upload_output);
               $r->print($upload_output);        } elsif ($env{'form.phase'} eq 'upload_embedded') {
           }            # Process file upload - phase two - upload embedded objects 
       } elsif ($env{'form.phasetwo'}) {            $uploadphase = 'check_embedded';
           my %newname = ();            my $primaryurl = &HTML::Entities::encode($env{'form.primaryurl'},'<>&"');   
           my %origname = ();            my $state = &embedded_form_elems($uploadphase,$primaryurl,
           my %attribs = ();                                             $env{'form.newidx'});
           my $updateflag = 0;            my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
           my $residx = $env{'form.newidx'};            my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
           my $primary_url = &unescape($env{'form.primaryurl'});            my ($destination,$dir_root) = &embedded_destination();
 # Process file upload - phase two - gather secondary files.            my $url_root = '/uploaded/'.$docudom.'/'.$docuname;
           for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {            my $actionurl = '/adm/coursedocs';
               if ($env{'form.embedded_item_'.$i.'.filename'}) {            my ($result,$flag) = 
                   my $javacodebase;                &Apache::loncommon::upload_embedded('coursedoc',$destination,
                   $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);                    $docuname,$docudom,$dir_root,$url_root,undef,undef,undef,$state,
                   $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});                    $actionurl);
                   if (exists($env{'form.embedded_codebase_'.$i})) {            $r->print($result.&return_to_editor());
                       $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});        } elsif ($env{'form.phase'} eq 'check_embedded') {
                       $origname{$i} =~ s#^\Q$javacodebase\E/##;            # Process file upload - phase three - modify references in HTML file
                   }            $uploadphase = 'modified_orightml';
                   my @attributes = ();            my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
                   if ($env{'form.embedded_attrib_'.$i} =~ /:/) {            my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
                       @attributes = split(/:/,$env{'form.embedded_attrib_'.$i});            my ($destination,$dir_root) = &embedded_destination();
                   } else {            $r->print(&Apache::loncommon::modify_html_refs('coursedoc',$destination,
                       @attributes = ($env{'form.embedded_attrib_'.$i});                                                           $docuname,$docudom,undef,
                   }                                                           $dir_root).
                   foreach my $attr (@attributes) {                     &return_to_editor());
                       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 ||  $upload_result eq 'phasetwo') {    unless ($showdoc || $uploadphase) {  
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        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 2894  sub create_form_ul { Line 2933  sub create_form_ul {
                 'upld' => 'Import Document',                  'upld' => 'Import Document',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
  'book' => 'Import Bookmarks',   'wish' => 'Import from Wishlist',
                 'selm' => 'Select Map',                  'selm' => 'Select Map',
                 'load' => 'Load Map',                  'load' => 'Load Map',
                 'reco' => 'Recover Deleted Resources',                  'reco' => 'Recover Deleted Documents',
                 'newf' => 'New Folder',                  'newf' => 'New Folder',
                 'newp' => 'New Composite Page',                  'newp' => 'New Composite Page',
                 'extr' => 'External Resource',                  'extr' => 'External Resource',
                 'syll' => 'Syllabus',                  'syll' => 'Syllabus',
                 'navc' => 'Navigate Contents',                  'navc' => 'Table of Contents',
                 'sipa' => 'Simple Course Page',                  'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',                  'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',                  'drbx' => 'Drop Box',
Line 2945  CHBO Line 2984  CHBO
  $fileupload   $fileupload
  <br />   <br />
  $lt{'title'}:<br />   $lt{'title'}:<br />
  <input type="text" size="50" name="comment" />   <input type="text" size="80" name="comment" />
  $uploadtag   $uploadtag
  <input type="hidden" name="cmd" value="upload_default" />   <input type="hidden" name="cmd" value="upload_default" />
  <br />   <br />
Line 2953  CHBO Line 2992  CHBO
  $checkbox   $checkbox
  </span>   </span>
 FUFORM  FUFORM
     #$list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});      $fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>';
     #$fileuploadform .= create_form_ul(create_list_elements(@fileuploada));  
     $fileuploadform .= create_form_ul(Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'}));  
  $fileuploadform .= (<<FUFORM);  
  </form>  
 FUFORM  
   
  my $simpleeditdefaultform=(<<SEDFFORM);   my $simpleeditdefaultform=(<<SEDFFORM);
  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">   <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
  <input type="hidden" name="active" value="bb" />   <input type="hidden" name="active" value="bb" />
 SEDFFORM  SEDFFORM
  my @simpleeditdefaultforma = (    my @simpleeditdefaultforma = ( 
  { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'"  onclick="javascript:groupsearch()" />' => "$uploadtag<a onclick='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 onclick='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 onclick='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);
  <hr />   <hr />
  <p>   <p>
Line 2983  SEDFFORM Line 3017  SEDFFORM
  </form>   </form>
 SEDFFORM  SEDFFORM
   
  my $extresourcesform=(<<ERFORM);        my $extresourcesform=(<<ERFORM);
  <form action="/adm/coursedocs" method="post" name="newext">        <form action="/adm/coursedocs" method="post" name="newext">
  $uploadtag        $uploadtag
  <input type="hidden" name="importdetail" value="" />        <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}        <a class="LC_menubuttons_link" href="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
  </form>        </form>
 ERFORM  ERFORM
   
   
     if ($allowed) {      if ($allowed) {
  &update_paste_buffer($coursenum,$coursedom);   &update_paste_buffer($coursenum,$coursedom);
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
Line 3000  ERFORM Line 3035  ERFORM
                                          'sl' => 'Show Log'                                           'sl' => 'Show Log'
   );    );
   
        my $folderpath=$env{'form.folderpath'};  
        if (!$folderpath) {  
    if ($env{'form.folder'} eq '' ||  
        $env{'form.folder'} eq 'supplemental') {  
        $folderpath='default&'.  
    &escape(&mt('Main '.$crstype.' Documents'));  
    }  
        }  
        unless ($env{'form.pagepath'}) {  
            $containertag = '<input type="hidden" name="folderpath" value="" />';  
            $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';  
        }  
  $r->print(<<HIDDENFORM);   $r->print(<<HIDDENFORM);
  <form name="renameform" method="post" action="/adm/coursedocs">   <form name="renameform" method="post" action="/adm/coursedocs">
    <input type="hidden" name="title" />     <input type="hidden" name="title" />
Line 3026  ERFORM Line 3049  ERFORM
  </form>   </form>
 HIDDENFORM  HIDDENFORM
     }      }
 # --------------------------------------------------------- Main tab structure  
    # Generate the tabs
     my $activeClass = 1;      &startContentScreen($r,($supplementalflag?'supdocs':'docs'));
     my $active = '';  
     my %tabtitles = (  
                        main => {  #
                                  Course => &mt('Main Course Documents'),  
                                  Community => &mt('Main Community Documents'),      my $savefolderpath;
                                },  
                        supplemental => {  
                                  Course => &mt('Supplemental Course Documents'),          
                                  Community => &mt('Supplemental Community Documents'),  
                                },  
                     );  
     if ($allowed) {      if ($allowed) {
         $r->print('<ul class="LC_TabContentBigger" id="mainnav">');  
         if (($standard) && ($allowed) && (!$forcesupplement) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'}eq"" || ($env{'form.pagepath'}))) {  
             if($activeClass == 1){  
                 $active = 'class="active"';  
         $activeClass = 0;  
     }  
         }  
         $r->print('<li '.$active.' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'main'}{$crstype}.'</b></a></li>');  
         $active = '';  
         if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {  
             if($activeClass == 1){  
                 $active = 'class="active"';  
             }  
         }  
         $r->print('<li '.$active.' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'supplemental'}{$crstype}.'</b></a></li>');  
         $r->print('</ul>');  
     } else {  
         $r->print('<br />');  
     }  
     $r->print('<div class="LC_Box" style="clear:both;margin:0;">'  
              .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');  
 # --------------------------------------------------------- Standard documents  
        my $savefolderpath;  
        $active = 'style="display: none;"';  
        if($activeClass == 0){  
           $active = 'style="display: block;"';  
        }  
        if ($allowed) {  
        $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" '.$active.'>');  
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        if ($folder eq '' || $folder=~/^supplemental/) {         if ($folder eq '' || $supplementalflag) {
            $folder='default';             $folder='default';
    $savefolderpath = $env{'form.folderpath'};     $savefolderpath = $env{'form.folderpath'};
    $env{'form.folderpath'}='default&'.&escape($tabtitles{'main'}{$crstype});     $env{'form.folderpath'}='default&'.&escape(&mt('Content'));
            $uploadtag = '<input type="hidden" name="folderpath" value="'.             $uploadtag = '<input type="hidden" name="folderpath" value="'.
        &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';         &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }         }
Line 3103  HIDDENFORM Line 3092  HIDDENFORM
   
  my $recoverform=(<<RFORM);   my $recoverform=(<<RFORM);
  <form action="/adm/groupsort" method="post" name="recover">   <form action="/adm/groupsort" method="post" name="recover">
  <a onclick="javascript:groupopen('$readfile',1,0)">$lt{'reco'}</a>   <a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1)">$lt{'reco'}</a>
  </form>   </form>
 RFORM  RFORM
   
  my $imspform=(<<IMSPFORM);   my $imspform=(<<IMSPFORM);
  <form action="/adm/imsimportdocs" method="post" name="ims">   <form action="/adm/imsimportdocs" method="post" name="ims">
  <input type="hidden" name="folder" value="$folder" />   <input type="hidden" name="folder" value="$folder" />
  <a onclick="javascript:makeims();">$lt{'imsf'}</a>   <a class="LC_menubuttons_link" href="javascript:makeims();">$lt{'imsf'}</a>
  </form>   </form>
 IMSPFORM  IMSPFORM
   
Line 3120  IMSPFORM Line 3109  IMSPFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'navc'}=/adm/navmaps" />   value="$lt{'navc'}=/adm/navmaps" />
  <a onclick="document.newnav.submit()">$lt{'navc'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newnav.submit()">$lt{'navc'}</a>
  $help{'Navigate_Content'}   $help{'Navigate_Content'}
  </form>   </form>
 NNFORM  NNFORM
Line 3129  NNFORM Line 3118  NNFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makesmppage();"> $lt{'sipa'}</a>   <a class="LC_menubuttons_link" href="javascript:makesmppage();"> $lt{'sipa'}</a>
  $help{'Simple Page'}   $help{'Simple Page'}
  </form>   </form>
 NSPFORM  NSPFORM
Line 3139  NSPFORM Line 3128  NSPFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makesmpproblem();">$lt{'sipr'}</a>   <a class="LC_menubuttons_link" href="javascript:makesmpproblem();">$lt{'sipr'}</a>
  $help{'Simple Problem'}   $help{'Simple Problem'}
  </form>   </form>
   
Line 3150  NSPROBFORM Line 3139  NSPROBFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makedropbox();">$lt{'drbx'}</a>   <a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>
  </form>   </form>
 NDBFORM  NDBFORM
   
Line 3159  NDBFORM Line 3148  NDBFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makeexamupload();">$lt{'scuf'}</a>   <a class="LC_menubuttons_link" href="javascript:makeexamupload();">$lt{'scuf'}</a>
  $help{'Score_Upload_Form'}   $help{'Score_Upload_Form'}
  </form>   </form>
 NEXUFORM  NEXUFORM
Line 3169  NEXUFORM Line 3158  NEXUFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makebulboard();" >$lt{'bull'}</a>   <a class="LC_menubuttons_link" href="javascript:makebulboard();" >$lt{'bull'}</a>
  $help{'Bulletin Board'}   $help{'Bulletin Board'}
  </form>   </form>
 NBFORM  NBFORM
Line 3180  NBFORM Line 3169  NBFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$plainname=/adm/$udom/$uname/aboutme" />   value="$plainname=/adm/$udom/$uname/aboutme" />
  <a onclick="document.newaboutme.submit()">$lt{'mypi'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newaboutme.submit()">$lt{'mypi'}</a>
  $help{'My Personal Information Page'}   $help{'My Personal Information Page'}
  </form>   </form>
 NAMFORM  NAMFORM
Line 3190  NAMFORM Line 3179  NAMFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makeabout();">$lt{'abou'}</a>   <a class="LC_menubuttons_link" href="javascript:makeabout();">$lt{'abou'}</a>
  </form>   </form>
 NASOFORM  NASOFORM
   
Line 3201  NASOFORM Line 3190  NASOFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'rost'}=/adm/viewclasslist" />   value="$lt{'rost'}=/adm/viewclasslist" />
  <a onclick="document.newroster.submit()">$lt{'rost'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>
  $help{'Course Roster'}   $help{'Course Roster'}
  </form>   </form>
 NROSTFORM  NROSTFORM
Line 3219  my $newfolderb; Line 3208  my $newfolderb;
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  <a onclick="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>   <a class="LC_menubuttons_link" href="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>
  $help{'Adding_Pages'}   $help{'Adding_Pages'}
  </form>   </form>
 NPFORM  NPFORM
Line 3230  NPFORM Line 3219  NPFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <input type="hidden" name="active" value="aa" />   <input type="hidden" name="active" value="aa" />
  <a onclick="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}   <a href="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}
  </form>   </form>
 NFFORM  NFFORM
   
Line 3240  NFFORM Line 3229  NFFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />   value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />
  <a onclick="document.newsyl.submit()">$lt{'syll'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newsyl.submit()">$lt{'syll'}</a>
  $help{'Syllabus'}   $help{'Syllabus'}
   
  </form>   </form>
Line 3252  NSYLFORM Line 3241  NSYLFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"   <input type="hidden" name="importdetail"
  value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />   value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />
  <a onclick="document.newgroupfiles.submit()">$lt{'grpo'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newgroupfiles.submit()">$lt{'grpo'}</a>
  $help{'Group Portfolio'}   $help{'Group Portfolio'}
  </form>   </form>
 NGFFORM  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/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
  );    );
   
       }          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/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);
           $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;
   
  push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},   push @specialdocumentsforma, ({'<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},   {'<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},
Line 3271  NGFFORM Line 3264  NGFFORM
  {'<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/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/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/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/chrt.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);
   
  $specialdocumentsform = create_form_ul(create_list_elements(@specialdocumentsforma));   $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
         }
   
 if($env{'form.pagepath'}) {  if($env{'form.pagepath'}) {
   
Line 3281  if($env{'form.pagepath'}) { Line 3275  if($env{'form.pagepath'}) {
  {'<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/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}   {'<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));   $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},
 # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" />'=>$imspform},  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" />'=>$imspform},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1,0)" />'=>$recoverform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1)" />'=>$recoverform},
  );   );
   
 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/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},   
 );  
 $fileuploadform =  create_form_ul(create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;  
 my %orderhash = (  my %orderhash = (
  '00' => ['Newfolder',$newfolderform],  
                 'aa' => ['Import Documents',$fileuploadform],                  'aa' => ['Import Documents',$fileuploadform],
                 'bb' => ['Published Resources',$simpleeditdefaultform],                  'bb' => ['Published Resources',$simpleeditdefaultform],
                 'cc' => ['Special Documents',$specialdocumentsform],                  'cc' => ['Special Documents',$specialdocumentsform],
  'dd' => ['Tools', create_form_ul(create_list_elements(@tools)).&generate_admin_options($containertag,$uploadtag,\%help,\%env)],   'dd' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );                  );
 my $tid='1';  unless($env{'form.pagepath'}) {
       $orderhash{'00'} = ['Newfolder',$newfolderform];
   }
   
  $hadchanges=0;   $hadchanges=0;
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);         unless ($supplementalflag) {
        if ($error) {            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
            $r->print('<p><span class="LC_error">'.$error.'</span></p>');            if ($error) {
        }               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
        if ($hadchanges) {            }
            &mark_hash_old();            if ($hadchanges) {
        }               &mark_hash_old();
             }
   
        &changewarning($r,'');            &changewarning($r,'');
 $r->print(&generate_edit_table($tid,\%orderhash));            $r->print(&generate_edit_table('1',\%orderhash));
           }
   
 $r->print('</div>');  
  }   }
        if ($env{'form.pagepath'}) {  
        }  # Supplemental documents start here
 # ----------------------------------------------------- Supplemental documents  
        $active = 'style="display: none;"';  
        if($activeClass == 1){  
           $active = 'style="display: block;"';  
        }  
        $r->print('<div class="LC_ContentBox" id="supplCourseDocuments" '.$active.'>');  
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        unless ($folder=~/^supplemental/) {         unless ($supplementalflag) {
    $folder='supplemental';     $folder='supplemental';
        }         }
        if ($folder =~ /^supplemental$/ &&         if ($folder =~ /^supplemental$/ &&
    (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {     (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {
           $env{'form.folderpath'} = 'supplemental&'.            $env{'form.folderpath'} = &supplemental_base();
                                     &escape(&mt('Supplemental '.$crstype.' Documents'));  
        } elsif ($allowed) {         } elsif ($allowed) {
   $env{'form.folderpath'} = $savefolderpath;    $env{'form.folderpath'} = $savefolderpath;
        }         }
Line 3361  $r->print('</div>'); Line 3347  $r->print('</div>');
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="cmd" value="upload_supplemental" />   <input type="hidden" name="cmd" value="upload_supplemental" />
 SUPDOCFORM  SUPDOCFORM
  $supupdocform .=  create_form_ul(Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";   $supupdocform .=  &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";
   
  my $supnewfolderform=(<<SNFFORM);   my $supnewfolderform=(<<SNFFORM);
  <form action="/adm/coursedocs" method="post" name="supnewfolder">   <form action="/adm/coursedocs" method="post" name="supnewfolder">
  <input type="hidden" name="active" value="ee" />   <input type="hidden" name="active" value="ee" />
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a>    <a class="LC_menubuttons_link" href="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a> 
  $help{'Adding_Folders'}   $help{'Adding_Folders'}
  </form>   </form>
 SNFFORM  SNFFORM
Line 3379  SNFFORM Line 3365  SNFFORM
  <input type="hidden" name="active" value="ff" />   <input type="hidden" name="active" value="ff" />
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}   <a class="LC_menubuttons_link" href="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}
  </form>   </form>
 SNEFORM  SNEFORM
   
Line 3389  SNEFORM Line 3375  SNEFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="Syllabus=/public/$coursedom/$coursenum/syllabus" />   value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
  <a onclick="document.supnewsyl.submit()">$lt{'syll'}</a>   <a class="LC_menubuttons_link" href="javascript:document.supnewsyl.submit()">$lt{'syll'}</a>
  $help{'Syllabus'}   $help{'Syllabus'}
  </form>   </form>
 SNSFORM  SNSFORM
Line 3400  SNSFORM Line 3386  SNSFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$plainname=/adm/$udom/$uname/aboutme" />   value="$plainname=/adm/$udom/$uname/aboutme" />
  <a onclick="document.supnewaboutme.submit()">$lt{'mypi'}</a>   <a class="LC_menubuttons_link" href="javascript:document.supnewaboutme.submit()">$lt{'mypi'}</a>
  $help{'My Personal Information Page'}   $help{'My Personal Information Page'}
  </form>   </form>
 SNAMFORM  SNAMFORM
Line 3416  my @supimportdoc = ( Line 3402  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/>' . $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) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);             my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
         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));
         }          }
         my $tid='2';      } elsif ($supplementalflag) {
         $r->print(&generate_edit_table($tid,\%suporderhash));  
     } else {  
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
         if ($error) {          if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');              $r->print('<p><span class="LC_error">'.$error.'</span></p>');
         }          }
     }      }
   
       &endContentScreen($r);
 $r->print('</div>');  
 $r->print('</div></div>');  
   
   
     if ($allowed) {      if ($allowed) {
  $r->print('   $r->print('
Line 3451  $r->print('</div></div>'); Line 3434  $r->print('</div></div>');
 </form>');  </form>');
     }      }
   } else {    } else {
       unless ($upload_result eq 'phasetwo') {        unless ($uploadphase) {
 # -------------------------------------------------------- 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 3464  $r->print('</div></div>'); Line 3447  $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 ($containertag,$uploadtag,$help_ref,$env_ref) = @_;    my ($help_ref,$env_ref) = @_;
  my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
                                          'vc' => 'Verify Content',                                           'vc' => 'Verify Content',
                                          'cv' => 'Check/Set Resource Versions',                                           'cv' => 'Check/Set Resource Versions',
                                          'ls' => 'List Symbs',                                           'ls' => 'List Symbs',
                                          'sl' => 'Show Log',                                           'sl' => 'Show Log',
                                          'imse' => 'IMS Export',                                           'imse' => 'IMS Export',
                                          'dcd' => 'Dump Course DOCS to Construction Space: available on other servers'                                           'dcd' => 'Dump Course Documents to Construction Space: available on other servers'
                                           );                                            );
   my %help = %{$help_ref};    my %help = %{$help_ref};
   my %env = %{$env_ref};    my %env = %{$env_ref};
Line 3480  sub generate_admin_options { Line 3499  sub generate_admin_options {
   my $exportbut=&exportbutton();    my $exportbut=&exportbutton();
   my @list = (    my @list = (
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/verify.png" alt="'.$lt{vc}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "verify", "'.$lt{'vc'}.'")\' />'    {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/verify.png" alt="'.$lt{vc}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "verify", "'.$lt{'vc'}.'")\' />' 
         => "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},          => "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/resversion.png" alt="'.$lt{cv}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "versions", "'.$lt{'cv'}.'")\' />'   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/resversion.png" alt="'.$lt{cv}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "versions", "'.$lt{'cv'}.'")\' />'
         =>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"versions\", \"$lt{'cv'}\")'>$lt{'cv'}</a>$help{'Check_Resource_Versions'}"},          =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"versions\", \"$lt{'cv'}\")'>$lt{'cv'}</a>$help{'Check_Resource_Versions'}"},
  );   );
   if($dumpbut ne ''){    if($dumpbut ne ''){
   push @list, {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dump.png" alt="'.$lt{dcd}.'" />'=>$dumpbut};    push @list, {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dump.png" alt="'.$lt{dcd}.'" />'=>$dumpbut};
   }    }
   push @list, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/imsexport.png" alt="'.$lt{imse}.'" onclick=\'javascript:injectData(document.courseverify, "dummy", "exportcourse", "'.&mt('IMS Export').'")\' />'    push @list, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/imsexport.png" alt="'.$lt{imse}.'" onclick="javascript:injectData(document.courseverify, \'dummy\', \'exportcourse\', \''.&mt('IMS Export').'\');" />'
           =>$exportbut},            =>$exportbut},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/symbs.png" alt="'.$lt{ls}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "listsymbs", "'.$lt{'ls'}.'")\'  />'   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/symbs.png" alt="'.$lt{ls}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "listsymbs", "'.$lt{'ls'}.'")\'  />'
         =>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"listsymbs\", \"$lt{'ls'}\")'>$lt{'ls'}</a><input type='hidden' name='folder' value='$env{'form.folder'}' />"},          =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"listsymbs\", \"$lt{'ls'}\")'>$lt{'ls'}</a><input type='hidden' name='folder' value='$env{'form.folder'}' />"},
  {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/log.png" alt="'.$lt{sl}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "docslog", "'.$lt{'sl'}.'")\'  />'   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/document-properties.png" alt="'.$lt{sl}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "docslog", "'.$lt{'sl'}.'")\'  />'
         =>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"docslog\", \"$lt{'sl'}\")'>$lt{'sl'}</a>"},          =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"docslog\", \"$lt{'sl'}\")'>$lt{'sl'}</a>"},
  );   );
   return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.create_form_ul(create_list_elements(@list)).'</form>';    return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.&create_form_ul(&create_list_elements(@list)).'</form>';
   
 }  }
   
Line 3518  sub generate_edit_table { Line 3537  sub generate_edit_table {
             }elsif($activetab eq $name){              }elsif($activetab eq $name){
                $active = 'class="active"';                 $active = 'class="active"';
             }              }
             $form .= '<li '.$active.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');">'.&mt(${$orderhash{$name}}[0]).'</li>';              $form .= '<li '.$active
                   .' 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>';
         } else {          } else {
     $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';      $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';
   
Line 3528  sub generate_edit_table { Line 3549  sub generate_edit_table {
     $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; clear: both;">';
     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;"';
         }elsif($activetab eq $field){              }elsif($activetab eq $field){
                 $active = 'style="display:block;"';                  $active = 'style="display:block;"';
         }              }
            $form .= '<div id="'.$field.$tid.'"'              $form .= '<div id="'.$field.$tid.'"'
                    .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]                      .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
                    .'</div>';                      .'</div>';
         }          }
     }      }
     $form .= '</div></div>';      $form .= '</div></div>';
Line 3570  sub editing_js { Line 3591  sub editing_js {
                                           p_ctr2b => '?[_98]'                                            p_ctr2b => '?[_98]'
                                         );                                          );
   
       my $crstype = &Apache::loncommon::course_type();
       my $docs_folderpath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'},'<>&"');
       my $docs_pagepath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.pagepath'},'<>&"');
       my $main_container_page;
       if ($docs_folderpath eq '') {
           if ($docs_pagepath ne '') {
               $main_container_page = 1;
           }
       }
       my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents';
       my $toplevelsupp = &supplemental_base();
   
     return <<ENDNEWSCRIPT;      return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {  function makenewfolder(targetform,folderseq) {
     var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');      var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');
Line 3781  function openTabs(pageId) { Line 3814  function openTabs(pageId) {
  if(currentLis[i].className == 'active') {   if(currentLis[i].className == 'active') {
  funcString = currentLis[i].onclick.toString();   funcString = currentLis[i].onclick.toString();
  tab = funcString.split('"');   tab = funcString.split('"');
                                   if(tab.length < 2) {
                                      tab = funcString.split("'");
                                   }
  currentData = document.getElementById(tab[1]);   currentData = document.getElementById(tab[1]);
         currentData.style.display = 'block';          currentData.style.display = 'block';
  }   }
Line 3795  function showPage(current, pageId, nav, Line 3831  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';
           if (nav == 'mainnav') {
               var storedpath = "$docs_folderpath";
               if (storedpath == '') {
                   storedpath = "$docs_pagepath";
               }
               var storedpage = "$main_container_page";
               var reg = new RegExp("^supplemental");
               if (pageId == 'mainCourseDocuments') {
                   if (storedpage == 1) {
                       document.simpleedit.folderpath.value = '';
                       document.uploaddocument.folderpath.value = '';
                   } else {
                       if (reg.test(storedpath)) {
                           document.simpleedit.folderpath.value = '$toplevelmain';
                           document.uploaddocument.folderpath.value = '$toplevelmain';
                           document.newext.folderpath.value = '$toplevelmain';
                       } else {
                           document.simpleedit.folderpath.value = storedpath;
                           document.uploaddocument.folderpath.value = storedpath;
                           document.newext.folderpath.value = storedpath;
                       }
                   }
               } else {
                   if (reg.test(storedpath)) {
                       document.simpleedit.folderpath.value = storedpath;
                       document.supuploaddocument.folderpath.value = storedpath;
                       document.supnewext.folderpath.value = storedpath;
                   } else {
                       document.simpleedit.folderpath.value = '$toplevelsupp';
                       document.supuploaddocument.folderpath.value = '$toplevelsupp';
                       document.supnewext.folderpath.value = '$toplevelsupp';
                   }
               }
           }
  return false;   return false;
 }  }
   

Removed from v.1.418  
changed lines
  Added in v.1.450


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