Diff for /loncom/interface/londocs.pm between versions 1.220 and 1.243

version 1.220, 2006/01/27 23:14:20 version 1.243, 2006/07/21 00:21:28
Line 42  use HTML::Entities; Line 42  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Cwd;  use Cwd;
   use LONCAPA;
   
 my $iconpath;  my $iconpath;
   
Line 119  sub authorhosts { Line 120  sub authorhosts {
   
 sub dumpbutton {  sub dumpbutton {
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
       my $type = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     my $output='</td><td bgcolor="#DDDDCC">';      my $output='</td><td bgcolor="#DDDDCC">';
     if ($home) {      if ($home) {
  return '</td><td bgcolor="#DDDDCC">'.   return '</td><td bgcolor="#DDDDCC">'.
     '<input type="submit" name="dumpcourse" value="'.      '<input type="submit" name="dumpcourse" value="'.
     &mt('Dump Course DOCS to Construction Space').'" />'.      &mt('Dump '.$type.' DOCS to Construction Space').'" />'.
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs');      &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs');
     } else {      } else {
  return'</td><td bgcolor="#DDDDCC">'.   return'</td><td bgcolor="#DDDDCC">'.
      &mt('Dump Course DOCS to Construction Space: available on other servers');       &mt('Dump '.$type.
    ' DOCS to Construction Space: available on other servers');
     }      }
 }  }
   
Line 140  sub clean { Line 143  sub clean {
 # -------------------------------------------------------- Actually dump course  # -------------------------------------------------------- Actually dump course
   
 sub dumpcourse {  sub dumpcourse {
     my $r=shift;      my ($r) = @_;
     my $html=&Apache::lonxml::xmlbegin();      my $type = &Apache::loncommon::course_type();
     $r->print($html.'<head><title>Dump DOCS</title></head>'.      $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
         &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space').  
       '<form name="dumpdoc" method="post">');        '<form name="dumpdoc" method="post">');
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
     unless ($home) { return ''; }      unless ($home) { return ''; }
Line 222  sub dumpcourse { Line 224  sub dumpcourse {
     $r->print('</select>');      $r->print('</select>');
  }   }
  my $title=$origcrsdata{'description'};   my $title=$origcrsdata{'description'};
  $title=~s/\s+/\_/gs;   $title=~s/[\/\s]+/\_/gs;
  $title=&clean($title);   $title=&clean($title);
  $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');   $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');
  &tiehash();   &tiehash();
Line 234  sub dumpcourse { Line 236  sub dumpcourse {
  'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};   'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};
     $title=~s/&colon;/:/g;      $title=~s/&colon;/:/g;
     $r->print('<td>'.($title?$title:'&nbsp;').'</td>');      $r->print('<td>'.($title?$title:'&nbsp;').'</td>');
     unless ($title) {      if (!$title) {
  $title=$_;   $title=$_;
       } else {
    $title=~s|/|_|g;
     }      }
     $title=~s/\.(\w+)$//;      $title=~s/\.(\w+)$//;
     $title=&clean($title);      $title=&clean($title);
Line 245  sub dumpcourse { Line 249  sub dumpcourse {
  $r->print("</table>\n");   $r->print("</table>\n");
  &untiehash();   &untiehash();
  $r->print(   $r->print(
   '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump Course DOCS').'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump [_1] DOCS',$type).'" /></p></form>');
     }      }
 }  }
   
 # ------------------------------------------------------ Generate "export" button  # ------------------------------------------------------ Generate "export" button
   
 sub exportbutton {  sub exportbutton {
       my $type = &Apache::loncommon::course_type();
     return '</td><td bgcolor="#DDDDCC">'.      return '</td><td bgcolor="#DDDDCC">'.
             '<input type="submit" name="exportcourse" value="'.              '<input type="submit" name="exportcourse" value="'.
             &mt('Export Course to IMS').'" />'.              &mt('Export '.$type.' to IMS').'" />'.
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
 }  }
   
 sub exportcourse {  sub exportcourse {
     my $r=shift;      my $r=shift;
       my $type = &Apache::loncommon::course_type();
     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;
Line 300  sub exportcourse { Line 306  sub exportcourse {
                 open(OUTPUT, "zip -r $imszip *  2> /dev/null |");                  open(OUTPUT, "zip -r $imszip *  2> /dev/null |");
                 close(OUTPUT);                  close(OUTPUT);
                 chdir $cwd;                  chdir $cwd;
                 $outcome .= 'Download the zip file from <a href="'.$imszipfile.'">IMS course archive</a><br />';                  $outcome .= &mt('Download the zip file from <a href="[_1]">IMS '.lc($type).' archive</a><br />',$imszipfile,);
                 if ($copyresult) {                  if ($copyresult) {
                     $outcome .= 'The following errors occurred during export - '.$copyresult;                      $outcome .= 'The following errors occurred during export - '.$copyresult;
                 }                  }
Line 308  sub exportcourse { Line 314  sub exportcourse {
                 $outcome = '<br />Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.<br />';                  $outcome = '<br />Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.<br />';
             }              }
         }          }
  my $html=&Apache::lonxml::xmlbegin();          $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package'));
         $r->print($html.'<head><title>Export Course</title></head>'.  
             &Apache::loncommon::bodytag('Export course to IMS content package'));  
         $r->print($outcome);          $r->print($outcome);
         $r->print('</body></html>');          $r->print(&Apache::loncommon::end_page());
     } else {      } else {
         my $display;          my $display;
         $display = '<form name="exportdoc" method="post">'."\n";          $display = '<form name="exportdoc" method="post">'."\n";
         $display .= 'Choose which items you wish to export from your course.<br /><br />';          $display .= &mt('Choose which items you wish to export from your '.$type.'.<br /><br />');
         $display .= '<table border="0" cellspacing="0" cellpadding="3">'.          $display .= '<table border="0" cellspacing="0" cellpadding="3">'.
                     '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.                      '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.
                     '<input type="button" value="check all" '.                      '<input type="button" value="check all" '.
Line 450  function containerCheck(item) { Line 454  function containerCheck(item) {
   
 </script>  </script>
         |;          |;
  my $html=&Apache::lonxml::xmlbegin();   $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package',
         $r->print($html.'<head><title>Export Course</title>'.$scripttag.'</head>'.   $scripttag));
             &Apache::loncommon::bodytag('Export course to IMS content package'   $r->print($display.'</table>'.
 ));  
   
         $r->print($display.'</table>'.  
                   '<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="'.
                   &mt('Export Course DOCS').'" /></p></form></body></html>');                    &mt('Export '.$type.' DOCS').'" /></p></form>'.
     &Apache::loncommon::end_page());
     }      }
 }  }
   
Line 953  sub breadcrumbs { Line 955  sub breadcrumbs {
     my $folderpath;      my $folderpath;
     my $cpinfo='';      my $cpinfo='';
     if ($env{'form.markedcopy_url'}) {      if ($env{'form.markedcopy_url'}) {
  &Apache::lonnet::logthis('Found '.$env{'form.markedcopy_url'});  
        $cpinfo='&markedcopy_url='.         $cpinfo='&markedcopy_url='.
                &Apache::lonnet::escape($env{'form.markedcopy_url'}).                 &escape($env{'form.markedcopy_url'}).
                '&markedcopy_title='.                 '&markedcopy_title='.
                &Apache::lonnet::escape($env{'form.markedcopy_title'});                 &escape($env{'form.markedcopy_title'});
     }      }
       my $randompick=-1;
       my $isencrypted=0;
       my $ishidden=0;
     while (@folders) {      while (@folders) {
  my $folder=shift(@folders);   my $folder=shift(@folders);
  my $foldername=shift(@folders);   my $foldername=shift(@folders);
  if ($folderpath) {$folderpath.='&';}   if ($folderpath) {$folderpath.='&';}
  $folderpath.=$folder.'&'.$foldername;   $folderpath.=$folder.'&'.$foldername;
  my $url='/adm/coursedocs?folderpath='.   my $url='/adm/coursedocs?folderpath='.
     &Apache::lonnet::escape($folderpath);      &escape($folderpath);
               my $name=&unescape($foldername);
   # randompick number, hidden, encrypted is appended with ":"s to the foldername
               $name=~s/\:(\d*)\:(\w*)\:(\w*)$//;
               if ($1 ne '') { 
                  $randompick=$1;
               } else {
                  $randompick=-1;
               }
               if ($2) { $ishidden=1; }
               if ($3) { $isencrypted=1; }
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>&Apache::lonnet::unescape($foldername),         'title'=>$name,
        'text'=>'<font size="+1">'.         'text'=>'<font size="+1">'.
    &Apache::lonnet::unescape($foldername).'</font>'     $name.'</font>'
        });         });
          
     
     }      }
     return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef,      return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
        0,'nohelp');         'LC_docs_path'),$randompick,$ishidden,$isencrypted);
 }  }
   
 sub editor {  sub editor {
Line 1001  sub editor { Line 1013  sub editor {
  $env{'form.markedcopy_title'}=$title;   $env{'form.markedcopy_title'}=$title;
  $env{'form.markedcopy_url'}=$url;   $env{'form.markedcopy_url'}=$url;
     }      }
     $r->print(&breadcrumbs($folder));      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted)=&breadcrumbs($folder);
       $r->print($breadcrumbtrail);
     if ($fatal) {      if ($fatal) {
    $r->print('<p><font color="red">'.$errtext.'</font></p>');     $r->print('<p><font color="red">'.$errtext.'</font></p>');
     } else {      } else {
Line 1161  sub editor { Line 1174  sub editor {
        $Apache::lonratedt::order[$idx]]=         $Apache::lonratedt::order[$idx]]=
             $comment.':'.join(':',@rrest);              $comment.':'.join(':',@rrest);
     }      }
   # Devalidate title cache
                       my $renamed_url=$rrest[0];
   # Has the &colon;-escaping
                       $renamed_url=~s/\&colon\;/\:/g;
       &Apache::lonnet::devalidate_title_cache($renamed_url);
                 }                  }
 # Store the changed version  # Store the changed version
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,   ($errtext,$fatal)=&storemap($coursenum,$coursedom,
Line 1173  sub editor { Line 1191  sub editor {
 # Group import/search  # Group import/search
     if ($env{'form.importdetail'}) {      if ($env{'form.importdetail'}) {
  my @imports;   my @imports;
   # &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});
  foreach (split(/\&/,$env{'form.importdetail'})) {   foreach (split(/\&/,$env{'form.importdetail'})) {
     if (defined($_)) {      if (defined($_)) {
  my ($name,$url)=split(/\=/,$_);   my ($name,$url)=split(/\=/,$_);
  $name=&Apache::lonnet::unescape($name);   $name=&unescape($name);
  $url=&Apache::lonnet::unescape($url);   $url=&unescape($url);
  push @imports, $name, $url;   push @imports, $name, $url;
     }      }
  }   }
Line 1190  sub editor { Line 1209  sub editor {
  }   }
             }              }
 # Loading a complete map  # Loading a complete map
    if (($env{'form.importmap'}) && ($env{'form.loadmap'})) {     if ($env{'form.loadmap'}) {
        foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {                 if ($env{'form.importmap'}=~/\w/) {
    my ($title,$url,$ext,$type)=split(/\:/,$_);            foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
                    my $idx=&Apache::lonratedt::getresidx($url);        my ($title,$url,$ext,$type)=split(/\:/,$_);
                    $Apache::lonratedt::resources[$idx]=$_;                        my $idx=&Apache::lonratedt::getresidx($url);
                    $Apache::lonratedt::order                        $Apache::lonratedt::resources[$idx]=$_;
        [$#Apache::lonratedt::order+1]=$idx;                        $Apache::lonratedt::order
        }            [$#Apache::lonratedt::order+1]=$idx;
             }
 # Store the changed version  # Store the changed version
        ($errtext,$fatal)=&storemap($coursenum,$coursedom,             ($errtext,$fatal)=&storemap($coursenum,$coursedom,
    $folder.'.'.$container);     $folder.'.'.$container);
        if ($fatal) {            if ($fatal) {
    $r->print('<p><font color="red">'.$errtext.'</font></p>');        $r->print('<p><font color="red">'.$errtext.'</font></p>');
    return;        return;
        }            }
                  } else {
                      $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');
                  }
            }             }
        }         }
 # ---------------------------------------------------------------- End commands  # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen  # ---------------------------------------------------------------- Print screen
         my $idx=0;          my $idx=0;
  my $shown=0;   my $shown=0;
           if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
              $r->print('<p>'.&mt('Parameters').':<ul>'.
                        ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
                        ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
                        ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
                        '</ul></p>');
           }                                                                                                     
           if ($randompick>=0) {
              $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');
           }
         $r->print('<table>');          $r->print('<table>');
         foreach (@Apache::lonratedt::order) {          foreach (@Apache::lonratedt::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);             my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
Line 1327  sub process_file_upload { Line 1359  sub process_file_upload {
                   method="post" enctype="multipart/form-data">                    method="post" enctype="multipart/form-data">
    <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />   <input type="hidden" name="cmd" value="upload_embedded" />     <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />   <input type="hidden" name="cmd" value="upload_embedded" />
    <input type="hidden" name="newidx" value="'.$newidx.'" />     <input type="hidden" name="newidx" value="'.$newidx.'" />
    <input type="hidden" name="primaryurl" value="'.&Apache::lonnet::escape($url).'" />     <input type="hidden" name="primaryurl" value="'.&escape($url).'" />
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';     <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
                     $$upload_output .= '<b>Upload embedded files</b>:<br />                      $$upload_output .= '<b>Upload embedded files</b>:<br />
    <table>';     <table>';
                     foreach my $embed_file (keys(%{$allfiles})) {                      foreach my $embed_file (keys(%{$allfiles})) {
                         $$upload_output .= '<tr><td>'.$embed_file.                          $$upload_output .= '<tr><td>'.$embed_file.
           '<input name="embedded_item_'.$num.'" type="file" />            '<input name="embedded_item_'.$num.'" type="file" />
            <input name="embedded_orig_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($embed_file).'" />';             <input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />';
                         my $attrib;                          my $attrib;
                         if (@{$$allfiles{$embed_file}} > 1) {                          if (@{$$allfiles{$embed_file}} > 1) {
                             $attrib = join(':',@{$$allfiles{$embed_file}});                              $attrib = join(':',@{$$allfiles{$embed_file}});
Line 1345  sub process_file_upload { Line 1377  sub process_file_upload {
            '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />';             '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />';
                         if (exists($$codebase{$embed_file})) {                          if (exists($$codebase{$embed_file})) {
                             $$upload_output .=                               $$upload_output .= 
           '<input name="codebase_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($$codebase{$embed_file}).'" />';            '<input name="codebase_'.$num.'" type="hidden" value="'.&escape($$codebase{$embed_file}).'" />';
                         }                          }
                         $$upload_output .= '</td></tr>';                          $$upload_output .= '</td></tr>';
                         $num ++;                          $num ++;
Line 1388  sub entryline { Line 1420  sub entryline {
     my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;      my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
     $title=~s/\&colon\;/\:/g;      $title=~s/\&colon\;/\:/g;
     $title=&HTML::Entities::encode(&HTML::Entities::decode(      $title=&HTML::Entities::encode(&HTML::Entities::decode(
      &Apache::lonnet::unescape($title)),'"<>&\'');       &unescape($title)),'"<>&\'');
     my $renametitle=$title;      my $renametitle=$title;
     my $foldertitle=$title;      my $foldertitle=$title;
     my $pagetitle=$title;      my $pagetitle=$title;
Line 1400  sub entryline { Line 1432  sub entryline {
     &Apache::loncommon::plainname($2,$3).': <br />'.      &Apache::loncommon::plainname($2,$3).': <br />'.
     $foldertitle;      $foldertitle;
     }      }
     $renametitle=~s/\&quot\;/\\\"/g;  
     $renametitle=~s/\\/\\\\/g;      $renametitle=~s/\\/\\\\/g;
       $renametitle=~s/\&quot\;/\\\"/g;
     my $line='<tr>';      my $line='<tr>';
 # Edit commands  # Edit commands
     my $container;      my $container;
     my $folderpath;      my $folderpath;
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
         $container = 'sequence';          $container = 'sequence';
  $folderpath=&Apache::lonnet::escape($env{'form.folderpath'});   $folderpath=&escape($env{'form.folderpath'});
  # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');   # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');
     }      }
     my ($pagepath,$pagesymb);      my ($pagepath,$pagesymb);
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $container = 'page';          $container = 'page';
         $pagepath=&Apache::lonnet::escape($env{'form.pagepath'});          $pagepath=&escape($env{'form.pagepath'});
         $pagesymb=&Apache::lonnet::escape($env{'form.pagesymb'});          $pagesymb=&escape($env{'form.pagesymb'});
     }      }
     my $cpinfo='';      my $cpinfo='';
     if ($env{'form.markedcopy_url'}) {      if ($env{'form.markedcopy_url'}) {
        $cpinfo='&markedcopy_url='.         $cpinfo='&markedcopy_url='.
                &Apache::lonnet::escape($env{'form.markedcopy_url'}).                 &escape($env{'form.markedcopy_url'}).
                '&markedcopy_title='.                 '&markedcopy_title='.
                &Apache::lonnet::escape($env{'form.markedcopy_title'});                 &escape($env{'form.markedcopy_title'});
     }      }
     if ($allowed) {      if ($allowed) {
  my $incindex=$index+1;   my $incindex=$index+1;
Line 1580  END Line 1612  END
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) { 
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
  }   }
  $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);          if (&Apache::lonnet::symbverify($symb,$url)) {
       $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
           } else {
               $url='';
           }
  if ($container eq 'page') {   if ($container eq 'page') {
     my $symb=$env{'form.pagesymb'};      my $symb=$env{'form.pagesymb'};
                   
     $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);      $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
     $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
  }   }
     }      }
     my $parameterset='&nbsp;';      my $parameterset='&nbsp;';
     if ($isfolder || $extension eq 'sequence') {      if ($isfolder || $extension eq 'sequence') {
  my $foldername=&Apache::lonnet::escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
  if ($folderpath) { $folderpath.='&' };   if ($folderpath) { $folderpath.='&' };
  $folderpath.=$folderarg.'&'.$foldername;  # Append randompick number, hidden, and encrypted with ":" to foldername, 
  $url.='folderpath='.&Apache::lonnet::escape($folderpath).$cpinfo;  # so it gets transferred between levels
    $folderpath.=$folderarg.'&'.$foldername.':'.(&Apache::lonratedt::getparameter($orderidx,
                                                 'parameter_randompick'))[0]
                                                  .':'.((&Apache::lonratedt::getparameter($orderidx,
                                                 'parameter_hiddenresource'))[0]=~/^yes$/i)
                                                  .':'.((&Apache::lonratedt::getparameter($orderidx,
                                                 'parameter_encrypturl'))[0]=~/^yes$/i);
    $url.='folderpath='.&escape($folderpath).$cpinfo;
  $parameterset='<label>'.&mt('Randomly Pick: ').   $parameterset='<label>'.&mt('Randomly Pick: ').
     '<input type="text" size="4" onChange="this.form.submit()" name="randpick_'.$orderidx.'" value="'.      '<input type="text" size="4" onChange="this.form.submit()" name="randpick_'.$orderidx.'" value="'.
     (&Apache::lonratedt::getparameter($orderidx,      (&Apache::lonratedt::getparameter($orderidx,
Line 1604  END Line 1647  END
                 
     }      }
     if ($ispage) {      if ($ispage) {
         my $pagename=&Apache::lonnet::escape($pagetitle);          my $pagename=&escape($pagetitle);
         my $pagepath;          my $pagepath;
         my $folderpath=$env{'form.folderpath'};          my $folderpath=$env{'form.folderpath'};
         if ($folderpath) { $pagepath = $folderpath.'&' };          if ($folderpath) { $pagepath = $folderpath.'&' };
Line 1618  END Line 1661  END
        $residx,         $residx,
        $path.$pagearg.'.page');         $path.$pagearg.'.page');
  }   }
  $url.='pagepath='.&Apache::lonnet::escape($pagepath).   $url.='pagepath='.&escape($pagepath).
     '&pagesymb='.&Apache::lonnet::escape($symb).$cpinfo;      '&pagesymb='.&escape($symb).$cpinfo;
     }      }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.      $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.
  '" border="0"></a></td>'.   '" border="0"></a></td>'.
         "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>";          "<td bgcolor='#FFFFBB'>".($url?"<a href=\"$url\">":'').$title.
           ($url?'</a>':' <font size="-2">'.&mt('(re-initialize course to access)').'</font>')."</td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
        'hd' => 'Hidden',         'hd' => 'Hidden',
Line 1667  sub tiehash { Line 1711  sub tiehash {
 sub untiehash {  sub untiehash {
     if ($hashtied) { untie %hash; }      if ($hashtied) { untie %hash; }
     $hashtied=0;      $hashtied=0;
       return OK;
 }  }
   
 # --------------------------------------------------------------- check on this  # --------------------------------------------------------------- check on this
   
 sub checkonthis {  sub checkonthis {
     my ($r,$url,$level,$title)=@_;      my ($r,$url,$level,$title)=@_;
     $url=&Apache::lonnet::unescape($url);      $url=&unescape($url);
     $alreadyseen{$url}=1;      $alreadyseen{$url}=1;
     $r->rflush();      $r->rflush();
     if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {      if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
Line 1746  sub checkonthis { Line 1791  sub checkonthis {
 # ----------------------------------------------------------------- List Symbs  # ----------------------------------------------------------------- List Symbs
 #   # 
 sub list_symbs {  sub list_symbs {
    my $r=shift;       my ($r) = @_;
    my $html=&Apache::lonxml::xmlbegin();  
    $r->print($html.'<head><title>Symb List</title></head>'.      $r->print(&Apache::loncommon::start_page('Symb List'));
               &Apache::loncommon::bodytag('Symb List'));      my $navmap = Apache::lonnavmaps::navmap->new();
    my $navmap = Apache::lonnavmaps::navmap->new();      $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>');
    $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');  
 }  }
   
   
Line 1764  sub list_symbs { Line 1808  sub list_symbs {
 # -------------------------------------------------------------- Verify Content  # -------------------------------------------------------------- Verify Content
 #   # 
 sub verifycontent {  sub verifycontent {
    my $r=shift;       my ($r) = @_;
       my $type = &Apache::loncommon::course_type();
    my $loaderror=&Apache::lonnet::overloaderror($r);     my $loaderror=&Apache::lonnet::overloaderror($r);
    if ($loaderror) { return $loaderror; }     if ($loaderror) { return $loaderror; }
    my $html=&Apache::lonxml::xmlbegin();     $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
    $r->print($html.'<head><title>Verify Content</title></head>'.  
               &Apache::loncommon::bodytag('Verify Course Documents'));  
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
    &tiehash();     &tiehash();
    foreach (keys %hash) {     foreach (keys %hash) {
        if ($hash{$_}=~/\.(page|sequence)$/) {         if ($hash{$_}=~/\.(page|sequence)$/) {
    if (($_=~/^src_/) && ($alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {     if (($_=~/^src_/) && ($alreadyseen{&unescape($hash{$_})})) {
        $r->print('<hr /><font color="red">'.         $r->print('<hr /><font color="red">'.
  &mt('The following sequence or page is included more than once in your course: ').   &mt('The following sequence or page is included more than once in your '.$type.': ').
  &Apache::lonnet::unescape($hash{$_}).'</font><br />'.   &unescape($hash{$_}).'</font><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 (($_=~/^src\_(.+)$/) && (!$alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {         if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$_})})) {
            &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});             &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
        }         }
    }     }
Line 1802  sub devalidateversioncache { Line 1845  sub devalidateversioncache {
 }  }
   
 sub checkversions {  sub checkversions {
     my $r=shift;      my ($r) = @_;
     my $html=&Apache::lonxml::xmlbegin();      my $type = &Apache::loncommon::course_type();
     $r->print($html.'<head><title>Check Versions</title></head>'.      $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));
               &Apache::loncommon::bodytag('Check Course Document Versions'));  
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 1866  sub checkversions { Line 1908  sub checkversions {
     &changewarning($r,'');      &changewarning($r,'');
     if ($env{'form.timerange'} eq 'all') {      if ($env{'form.timerange'} eq 'all') {
 # show all documents  # show all documents
  $header=&mt('All Documents in Course');   $header=&mt('All Documents in '.$type);
  $allsel=1;   $allsel=1;
  foreach (keys %hash) {   foreach (keys %hash) {
     if ($_=~/^ids\_(\/res\/.+)$/) {      if ($_=~/^ids\_(\/res\/.+)$/) {
Line 1911  sub checkversions { Line 1953  sub checkversions {
   $env{'course.'.$env{'request.course.id'}.'.domain'},    $env{'course.'.$env{'request.course.id'}.'.domain'},
   $env{'course.'.$env{'request.course.id'}.'.num'});    $env{'course.'.$env{'request.course.id'}.'.num'});
     my %lt=&Apache::lonlocal::texthash      my %lt=&Apache::lonlocal::texthash
       ('st' => 'Version changes since start of Course',        ('st' => 'Version changes since start of '.$type,
        'lm' => 'Version changes since last Month',         'lm' => 'Version changes since last Month',
        'lw' => 'Version changes since last Week',         'lw' => 'Version changes since last Week',
        'sy' => 'Version changes since Yesterday',         'sy' => 'Version changes since Yesterday',
Line 1920  sub checkversions { Line 1962  sub checkversions {
        'fi' => 'File',         'fi' => 'File',
        'md' => 'Modification Date',         'md' => 'Modification Date',
                'mr' => 'Most recently published Version',                 'mr' => 'Most recently published Version',
        've' => 'Version used in Course',         've' => 'Version used in '.$type,
                'vu' => 'Set Version to be used in Course',                 'vu' => 'Set Version to be used in '.$type,
 'sv' => 'Set Versions to be used in Course according to Selections below',  'sv' => 'Set Versions to be used in '.$type.' according to Selections below',
 'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',  'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
 'sc' => 'Set all Resource Versions to current Version (Fix Versions)',  'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
        'di' => 'Differences');         'di' => 'Differences');
Line 1969  ENDHEADERS Line 2011  ENDHEADERS
                       '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '.                        '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '.
                       '<font size="+1">'.$currentversion.'</font>'.                        '<font size="+1">'.$currentversion.'</font>'.
                       '</nobr></td>'.                        '</nobr></td>'.
                       '<td title="'.$lt{'ve'}.'"><nobr>In Course: '.                        '<td title="'.$lt{'ve'}.'"><nobr>In '.$type.': '.
                       '<font size="+1">');                        '<font size="+1">');
 # Used in course  # Used in course
     my $usedversion=$hash{'version_'.$linkurl};      my $usedversion=$hash{'version_'.$linkurl};
Line 2073  sub changewarning { Line 2115  sub changewarning {
     my ($r,$postexec,$message,$url)=@_;      my ($r,$postexec,$message,$url)=@_;
     if (!&is_hash_old()) { return; }      if (!&is_hash_old()) { return; }
     my $pathvar='folderpath';      my $pathvar='folderpath';
     my $path=&Apache::lonnet::escape($env{'form.folderpath'});      my $path=&escape($env{'form.folderpath'});
     if (!defined($url)) {      if (!defined($url)) {
  if (defined($env{'form.pagepath'})) {   if (defined($env{'form.pagepath'})) {
     $pathvar='pagepath';      $pathvar='pagepath';
     $path=&Apache::lonnet::escape($env{'form.pagepath'});      $path=&escape($env{'form.pagepath'});
     $path.='&amp;pagesymb='.&Apache::lonnet::escape($env{'form.pagesymb'});      $path.='&amp;pagesymb='.&escape($env{'form.pagesymb'});
  }   }
  $url='/adm/coursedocs?'.$pathvar.'='.$path;   $url='/adm/coursedocs?'.$pathvar.'='.$path;
     }      }
       my $course_type = &Apache::loncommon::course_type();
     if (!defined($message)) {      if (!defined($message)) {
  $message='Changes will become active for your current session after [_1], or the next time you log in.';   $message='Changes will become active for your current session after [_1], or the next time you log in.';
     }      }
Line 2092  sub changewarning { Line 2135  sub changewarning {
 '" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.  '" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.
 &mt($message,' <input type="hidden" name="'.  &mt($message,' <input type="hidden" name="'.
     $env{'request.role'}.'" value="1" /><input type="button" value="'.      $env{'request.role'}.'" value="1" /><input type="button" value="'.
     &mt('re-initializing course').'" onClick="reinit(this.form)" />').      &mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />').
 $help{'Caching'}.'</font></h3></form>'."\n\n");  $help{'Caching'}.'</font></h3></form>'."\n\n");
 }  }
   
Line 2102  sub handler { Line 2145  sub handler {
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
       my $type = &Apache::loncommon::course_type();
   
 # --------------------------------------------- Initialize help topics for this  # --------------------------------------------- Initialize help topics for this
     foreach ('Adding_Course_Doc','Main_Course_Documents',      foreach ('Adding_Course_Doc','Main_Course_Documents',
Line 2145  sub handler { Line 2189  sub handler {
     my $forcestandard = 0;      my $forcestandard = 0;
     my $forcesupplement;      my $forcesupplement;
     my $script='';      my $script='';
     my $events='';  
     my $showdoc=0;      my $showdoc=0;
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['folderpath','pagepath','pagesymb','markedcopy_url','markedcopy_title']);      ['folderpath','pagepath',
        'pagesymb','markedcopy_url',
        'markedcopy_title']);
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  my (@folderpath)=split('&',$env{'form.folderpath'});   my (@folderpath)=split('&',$env{'form.folderpath'});
  $env{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath));   $env{'form.foldername'}=&unescape(pop(@folderpath));
  $env{'form.folder'}=pop(@folderpath);   $env{'form.folder'}=pop(@folderpath);
     }      }
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         my (@pagepath)=split('&',$env{'form.pagepath'});          my (@pagepath)=split('&',$env{'form.pagepath'});
         $env{'form.pagename'}=&Apache::lonnet::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="" />';
Line 2169  sub handler { Line 2214  sub handler {
        $showdoc='/'.$1;         $showdoc='/'.$1;
     }      }
     unless ($showdoc) { # got called from remote      unless ($showdoc) { # got called from remote
        if (($env{'form.folder'}=~/^default_/) ||          if (($env{'form.folder'}=~/^(?:group|default)_/) || 
           ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {            ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
            $forcestandard = 1;             $forcestandard = 1;
        }          } 
Line 2181  sub handler { Line 2226  sub handler {
        }         }
     } else { # got called in sequence from course      } else { # got called in sequence from course
        $allowed=0;         $allowed=0;
        $script='</script>'.&Apache::lonmenu::registerurl(1,undef).'<script>';  
        $events='onLoad="'.&Apache::lonmenu::loadevents.  
            '" onUnload="'.&Apache::lonmenu::unloadevents.'"';  
     }      }
   
 # 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'};
   
 # get personal data  # get personal data 
    
     my $uname=$env{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};      my $udom=$env{'user.domain'};
     my $plainname=&Apache::lonnet::escape(      my $plainname=&escape(
                      &Apache::loncommon::plainname($uname,$udom));                       &Apache::loncommon::plainname($uname,$udom));
   
 # graphics settings  # graphics settings
   
     $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");      $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
   
     my $now=time;      if ($allowed) {
    $script .= &editing_js($udom,$uname);
 # print screen  
        my $html=&Apache::lonxml::xmlbegin();  
     $r->print(<<ENDDOCUMENT);  
 $html  
 <head>  
 <title>The LearningOnline Network with CAPA</title>  
 <script>  
 $script  
 </script>  
 ENDDOCUMENT  
    if ($allowed) {  
     $r->print(<<ENDNEWSCRIPT);  
 <script>  
 function makenewfolder(targetform,folderseq) {  
     var foldername=prompt('Name of New Folder','New Folder');  
     if (foldername) {  
  targetform.importdetail.value=foldername+"="+folderseq;  
         targetform.submit();  
     }  
 }  
   
 function makenewpage(targetform,folderseq) {  
     var pagename=prompt('Name of New Page','New Page');  
     if (pagename) {  
         targetform.importdetail.value=pagename+"="+folderseq;  
         targetform.submit();  
     }  
 }  
   
 function makenewext(targetname) {  
     this.document.forms.extimport.useform.value=targetname;  
     window.open('/adm/rat/extpickframe.html');  
 }  
   
 function makeexamupload() {  
    var title=prompt('Listed Title for the Uploaded Score');  
    if (title) {   
     this.document.forms.newexamupload.importdetail.value=  
  title+'=/res/lib/templates/examupload.problem';  
     this.document.forms.newexamupload.submit();  
    }  
 }  
   
 function makesmppage() {  
    var title=prompt('Listed Title for the Page');  
    if (title) {   
     this.document.forms.newsmppg.importdetail.value=  
  title+'=/adm/$udom/$uname/$now/smppg';  
     this.document.forms.newsmppg.submit();  
    }  
 }  
   
 function makesmpproblem() {  
    var title=prompt('Listed Title for the Problem');  
    if (title) {   
     this.document.forms.newsmpproblem.importdetail.value=  
  title+'=/res/lib/templates/simpleproblem.problem';  
     this.document.forms.newsmpproblem.submit();  
    }  
 }  
   
 function makedropbox() {  
    var title=prompt('Listed Title for the Drop Box');  
    if (title) {   
     this.document.forms.newdropbox.importdetail.value=  
         title+'=/res/lib/templates/DropBox.problem';  
     this.document.forms.newdropbox.submit();  
    }  
 }  
   
 function makebulboard() {  
    var title=prompt('Listed Title for the Bulletin Board');  
    if (title) {  
     this.document.forms.newbul.importdetail.value=  
  title+'=/adm/$udom/$uname/$now/bulletinboard';  
     this.document.forms.newbul.submit();  
    }  
 }  
   
 function makeabout() {  
    var user=prompt("Enter user\@domain for User's 'About Me' Page");  
    if (user) {  
        var comp=new Array();  
        comp=user.split('\@');  
        if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {  
    if ((comp[0]) && (comp[1])) {  
        this.document.forms.newaboutsomeone.importdetail.value=  
    'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';  
        this.document.forms.newaboutsomeone.submit();  
    } else {  
                alert("Not a valid user\@domain");  
            }  
        } else {  
            alert("Please enter both user and domain in the format user\@domain");   
        }  
    }  
 }  
   
 function makeims() {  
     var caller = document.forms.ims.folder.value;  
     var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one";  
     newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes");  
     newWindow.location.href = newlocation;  
 }  
   
   
 function finishpick() {  
     var title=this.document.forms.extimport.title.value;  
     var url=this.document.forms.extimport.url.value;  
     var form=this.document.forms.extimport.useform.value;  
     eval  
      ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+  
     '";this.document.forms.'+form+'.submit();');  
 }  
   
 function changename(folderpath,index,oldtitle,container,pagesymb) {  
     var title=prompt('New Title',oldtitle);  
     if (title) {  
  this.document.forms.renameform.title.value=title;  
  this.document.forms.renameform.cmd.value='rename_'+index;  
         if (container == 'sequence') {  
     this.document.forms.renameform.folderpath.value=folderpath;  
         }  
         if (container == 'page') {  
             this.document.forms.renameform.pagepath.value=folderpath;  
             this.document.forms.renameform.pagesymb.value=pagesymb;  
         }  
         this.document.forms.renameform.submit();  
     }  
 }  
   
 function removeres(folderpath,index,oldtitle,container,pagesymb) {  
     if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) {  
  this.document.forms.renameform.cmd.value='del_'+index;  
         if (container == 'sequence') {  
             this.document.forms.renameform.folderpath.value=folderpath;  
         }  
         if (container == 'page') {  
             this.document.forms.renameform.pagepath.value=folderpath;  
             this.document.forms.renameform.pagesymb.value=pagesymb;  
         }  
         this.document.forms.renameform.submit();  
     }  
 }  
   
 function cutres(folderpath,index,oldtitle,container,pagesymb) {  
     if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) {  
  this.document.forms.renameform.cmd.value='cut_'+index;  
  this.document.forms.renameform.markcopy.value=index;  
         if (container == 'sequence') {  
             this.document.forms.renameform.folderpath.value=folderpath;  
         }  
         if (container == 'page') {  
             this.document.forms.renameform.pagepath.value=folderpath;  
             this.document.forms.renameform.pagesymb.value=pagesymb;  
         }  
         this.document.forms.renameform.submit();  
     }  
 }  
   
 function markcopy(folderpath,index,oldtitle,container,pagesymb) {  
     this.document.forms.renameform.markcopy.value=index;  
     if (container == 'sequence') {  
  this.document.forms.renameform.folderpath.value=folderpath;  
     }  
     if (container == 'page') {  
  this.document.forms.renameform.pagepath.value=folderpath;  
  this.document.forms.renameform.pagesymb.value=pagesymb;  
     }      }
     this.document.forms.renameform.submit();  
 }  
   
 </script>  
   
 ENDNEWSCRIPT  
   }  
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
   $r->print('</head>'.      $script = '<script type="text/javascript">'."\n".$script."\n".'</script>';
             &Apache::loncommon::bodytag('Course Documents','',$events,      $r->print(&Apache::loncommon::start_page("$type Documents", $script,
  '','',$showdoc).       {'force_register' => $showdoc,}).
     &Apache::loncommon::help_open_menu('','','','',273,'RAT'));        &Apache::loncommon::help_open_menu('','',273,'RAT'));
     
   my %allfiles = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output);    my ($upload_result,$upload_output);
Line 2402  ENDNEWSCRIPT Line 2269  ENDNEWSCRIPT
           my %attribs = ();            my %attribs = ();
           my $updateflag = 0;            my $updateflag = 0;
           my $residx = $env{'form.newidx'};            my $residx = $env{'form.newidx'};
           my $primary_url = &Apache::lonnet::unescape($env{'form.primaryurl'});            my $primary_url = &unescape($env{'form.primaryurl'});
 # Process file upload - phase two - gather secondary files.  # Process file upload - phase two - gather secondary files.
           for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {            for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {
               if ($env{'form.embedded_item_'.$i.'.filename'}) {                if ($env{'form.embedded_item_'.$i.'.filename'}) {
                   my $javacodebase;                    my $javacodebase;
                   $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);                    $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);
                   $origname{$i} = &Apache::lonnet::unescape($env{'form.embedded_orig_'.$i});                    $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});
                   if (exists($env{'form.embedded_codebase_'.$i})) {                    if (exists($env{'form.embedded_codebase_'.$i})) {
                       $javacodebase =  &Apache::lonnet::unescape($env{'form.embedded_codebase_'.$i});                          $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});  
                       $origname{$i} =~ s#^\Q$javacodebase\E/##;                         $origname{$i} =~ s#^\Q$javacodebase\E/##; 
                   }                    }
                   my @attributes = ();                    my @attributes = ();
Line 2420  ENDNEWSCRIPT Line 2287  ENDNEWSCRIPT
                       @attributes = ($env{'form.embedded_attrib_'.$i});                        @attributes = ($env{'form.embedded_attrib_'.$i});
                   }                    }
                   foreach (@attributes) {                    foreach (@attributes) {
                       push(@{$attribs{$i}},&Apache::lonnet::unescape($_));                        push(@{$attribs{$i}},&unescape($_));
                   }                    }
                   if ($javacodebase) {                    if ($javacodebase) {
                       $codebase{$i} = $javacodebase;                        $codebase{$i} = $javacodebase;
Line 2451  ENDNEWSCRIPT Line 2318  ENDNEWSCRIPT
                           $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;                             $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi; 
                       }                        }
                       if (exists($codebase{$item})) {                        if (exists($codebase{$item})) {
                           $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i;                            $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs
                       }                        }
                   }                    }
 # Save edited file.  # Save edited file.
Line 2469  ENDNEWSCRIPT Line 2336  ENDNEWSCRIPT
   unless ($showdoc ||  $upload_result eq 'phasetwo') {    unless ($showdoc ||  $upload_result eq 'phasetwo') {
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
                 'uplm' => 'Upload a new main course document',                  'uplm' => 'Upload a new main '.lc($type).' document',
                 'upls' => 'Upload a new supplemental course document',                  'upls' => 'Upload a new supplemental '.lc($type).' document',
                 'impp' => 'Import a document',                  'impp' => 'Import a document',
                 'pubd' => 'Published documents',                  'pubd' => 'Published documents',
  'copm' => 'All documents out of a published map into this folder',   'copm' => 'All documents out of a published map into this folder',
Line 2478  ENDNEWSCRIPT Line 2345  ENDNEWSCRIPT
                 'upld' => 'Upload Document',                  'upld' => 'Upload Document',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
    'book' => 'Import Bookmarks',
                 'selm' => 'Select Map',                  'selm' => 'Select Map',
                 'load' => 'Load Map',                  'load' => 'Load Map',
                 'reco' => 'Recover Deleted Resources',                  'reco' => 'Recover Deleted Resources',
Line 2514  ENDNEWSCRIPT Line 2382  ENDNEWSCRIPT
    if ($env{'form.folder'} eq '' ||     if ($env{'form.folder'} eq '' ||
        $env{'form.folder'} eq 'supplemental') {         $env{'form.folder'} eq 'supplemental') {
        $folderpath='default&'.         $folderpath='default&'.
    &Apache::lonnet::escape(&mt('Main Course Documents'));     &escape(&mt('Main '.$type.' Documents'));
    }     }
        }         }
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
Line 2547  $exportbut Line 2415  $exportbut
 </form>  </form>
 ENDCOURSEVERIFY  ENDCOURSEVERIFY
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',         $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
      &mt('Editing the Table of Contents for your Course')));       &mt('Editing the Table of Contents for your '.$type)));
     }      }
 # --------------------------------------------------------- Standard documents  # --------------------------------------------------------- Standard documents
     $r->print('<table border=2 cellspacing=4 cellpadding=4>');      $r->print('<table border=2 cellspacing=4 cellpadding=4>');
Line 2558  ENDCOURSEVERIFY Line 2426  ENDCOURSEVERIFY
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        if ($folder eq '' || $folder eq 'supplemental') {         if ($folder eq '' || $folder eq 'supplemental') {
            $folder='default';             $folder='default';
    $env{'form.folderpath'}='default&'.&Apache::lonnet::escape(&mt('Main Course Documents'));     $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
        }         }
        my $postexec='';         my $postexec='';
        if ($folder eq 'default') {         if ($folder eq 'default') {
Line 2614  $uploadtag Line 2482  $uploadtag
 <form action="/adm/coursedocs" method="post" name="simpleeditdefault">  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
 $lt{'pubd'}<br />  $lt{'pubd'}<br />
 $uploadtag  $uploadtag
 <input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}">  <input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}" />
   <br />
 <nobr>  <nobr>
 <input type=button onClick="javascript:groupimport();" value="$lt{'impo'}">  <input type=button onClick="javascript:groupimport();" value="$lt{'impo'}" />
 $help{'Importing_LON-CAPA_Resource'}  $help{'Importing_LON-CAPA_Resource'}
 </nobr>  </nobr>
   <br />
   <input type=button onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />
 <p>  <p>
 <hr />  <hr />
 $lt{'copm'}<br />  $lt{'copm'}<br />
Line 2631  $help{'Load_Map'}</nobr> Line 2502  $help{'Load_Map'}</nobr>
 </form>  </form>
 <hr />  <hr />
 <form action="/adm/groupsort" method="post" name="recover">  <form action="/adm/groupsort" method="post" name="recover">
 <input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1)" value="$lt{'reco'}" />  <input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1,0)" value="$lt{'reco'}" />
 </form>  </form>
 ENDFORM  ENDFORM
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
Line 2789  ENDBLOCK Line 2660  ENDBLOCK
        if ($folder =~ /^supplemental$/ &&         if ($folder =~ /^supplemental$/ &&
    $env{'form.folderpath'} =~ /^default\&/) {     $env{'form.folderpath'} =~ /^default\&/) {
    $env{'form.folderpath'}='supplemental&'.     $env{'form.folderpath'}='supplemental&'.
        &Apache::lonnet::escape(&mt('Supplemental Course Documents'));         &escape(&mt('Supplemental '.$type.' Documents'));
        }         }
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($allowed) {         if ($allowed) {
Line 2881  ENDSUPFORM Line 2752  ENDSUPFORM
       }        }
   }    }
  }   }
  $r->print('</body></html>');   $r->print(&Apache::loncommon::end_page());
  return OK;   return OK;
 }   } 
   
   
   sub editing_js {
       my ($udom,$uname) = @_;
       my $now = time();
   
       return <<ENDNEWSCRIPT;
   function makenewfolder(targetform,folderseq) {
       var foldername=prompt('Name of New Folder','New Folder');
       if (foldername) {
          targetform.importdetail.value=escape(foldername)+"="+folderseq;
           targetform.submit();
       }
   }
   
   function makenewpage(targetform,folderseq) {
       var pagename=prompt('Name of New Page','New Page');
       if (pagename) {
           targetform.importdetail.value=escape(pagename)+"="+folderseq;
           targetform.submit();
       }
   }
   
   function makenewext(targetname) {
       this.document.forms.extimport.useform.value=targetname;
       window.open('/adm/rat/extpickframe.html');
   }
   
   function makeexamupload() {
      var title=prompt('Listed Title for the Uploaded Score');
      if (title) { 
       this.document.forms.newexamupload.importdetail.value=
    escape(title)+'=/res/lib/templates/examupload.problem';
       this.document.forms.newexamupload.submit();
      }
   }
   
   function makesmppage() {
      var title=prompt('Listed Title for the Page');
      if (title) { 
       this.document.forms.newsmppg.importdetail.value=
    escape(title)+'=/adm/$udom/$uname/$now/smppg';
       this.document.forms.newsmppg.submit();
      }
   }
   
   function makesmpproblem() {
      var title=prompt('Listed Title for the Problem');
      if (title) { 
       this.document.forms.newsmpproblem.importdetail.value=
    escape(title)+'=/res/lib/templates/simpleproblem.problem';
       this.document.forms.newsmpproblem.submit();
      }
   }
   
   function makedropbox() {
      var title=prompt('Listed Title for the Drop Box');
      if (title) { 
       this.document.forms.newdropbox.importdetail.value=
           escape(title)+'=/res/lib/templates/DropBox.problem';
       this.document.forms.newdropbox.submit();
      }
   }
   
   function makebulboard() {
      var title=prompt('Listed Title for the Bulletin Board');
      if (title) {
       this.document.forms.newbul.importdetail.value=
    escape(title)+'=/adm/$udom/$uname/$now/bulletinboard';
       this.document.forms.newbul.submit();
      }
   }
   
   function makeabout() {
      var user=prompt("Enter user:domain for User's 'About Me' Page");
      if (user) {
          var comp=new Array();
          comp=user.split(':');
          if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {
      if ((comp[0]) && (comp[1])) {
          this.document.forms.newaboutsomeone.importdetail.value=
      'About '+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';
          this.document.forms.newaboutsomeone.submit();
      } else {
                  alert("Not a valid user:domain");
              }
          } else {
              alert("Please enter both user and domain in the format user:domain"); 
          }
      }
   }
   
   function makeims() {
       var caller = document.forms.ims.folder.value;
       var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one";
       newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes");
       newWindow.location.href = newlocation;
   }
   
   
   function finishpick() {
       var title=this.document.forms.extimport.title.value;
       var url=this.document.forms.extimport.url.value;
       var form=this.document.forms.extimport.useform.value;
       eval
        ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+
       '";this.document.forms.'+form+'.submit();');
   }
   
   function changename(folderpath,index,oldtitle,container,pagesymb) {
       var title=prompt('New Title',oldtitle);
       if (title) {
    this.document.forms.renameform.title.value=title;
    this.document.forms.renameform.cmd.value='rename_'+index;
           if (container == 'sequence') {
       this.document.forms.renameform.folderpath.value=folderpath;
           }
           if (container == 'page') {
               this.document.forms.renameform.pagepath.value=folderpath;
               this.document.forms.renameform.pagesymb.value=pagesymb;
           }
           this.document.forms.renameform.submit();
       }
   }
   
   function removeres(folderpath,index,oldtitle,container,pagesymb) {
       if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) {
    this.document.forms.renameform.cmd.value='del_'+index;
           if (container == 'sequence') {
               this.document.forms.renameform.folderpath.value=folderpath;
           }
           if (container == 'page') {
               this.document.forms.renameform.pagepath.value=folderpath;
               this.document.forms.renameform.pagesymb.value=pagesymb;
           }
           this.document.forms.renameform.submit();
       }
   }
   
   function cutres(folderpath,index,oldtitle,container,pagesymb) {
       if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) {
    this.document.forms.renameform.cmd.value='cut_'+index;
    this.document.forms.renameform.markcopy.value=index;
           if (container == 'sequence') {
               this.document.forms.renameform.folderpath.value=folderpath;
           }
           if (container == 'page') {
               this.document.forms.renameform.pagepath.value=folderpath;
               this.document.forms.renameform.pagesymb.value=pagesymb;
           }
           this.document.forms.renameform.submit();
       }
   }
   
   function markcopy(folderpath,index,oldtitle,container,pagesymb) {
       this.document.forms.renameform.markcopy.value=index;
       if (container == 'sequence') {
    this.document.forms.renameform.folderpath.value=folderpath;
       }
       if (container == 'page') {
    this.document.forms.renameform.pagepath.value=folderpath;
    this.document.forms.renameform.pagesymb.value=pagesymb;
       }
       this.document.forms.renameform.submit();
   }
   
   ENDNEWSCRIPT
   }
 1;  1;
 __END__  __END__

Removed from v.1.220  
changed lines
  Added in v.1.243


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