Diff for /loncom/interface/londocs.pm between versions 1.222 and 1.242

version 1.222, 2006/02/24 22:52:41 version 1.242, 2006/07/20 20:42:48
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 lib '/home/httpd/lib/perl/';
   use LONCAPA;
   
 my $iconpath;  my $iconpath;
   
Line 119  sub authorhosts { Line 121  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 144  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 225  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 237  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 250  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 307  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 315  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 455  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 956  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 1014  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 1175  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 1192  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 1210  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 1360  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 1378  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 1421  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 1408  sub entryline { Line 1441  sub entryline {
     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 1613  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 1648  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 1662  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 1674  sub untiehash { Line 1719  sub untiehash {
   
 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 1747  sub checkonthis { Line 1792  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 1765  sub list_symbs { Line 1809  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 1803  sub devalidateversioncache { Line 1846  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 1867  sub checkversions { Line 1909  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 1912  sub checkversions { Line 1954  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 1921  sub checkversions { Line 1963  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 1970  ENDHEADERS Line 2012  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 2074  sub changewarning { Line 2116  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 2093  sub changewarning { Line 2136  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 2103  sub handler { Line 2146  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 2146  sub handler { Line 2190  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 2170  sub handler { Line 2215  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 2182  sub handler { Line 2227  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 2403  ENDNEWSCRIPT Line 2270  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 2421  ENDNEWSCRIPT Line 2288  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 2452  ENDNEWSCRIPT Line 2319  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 2470  ENDNEWSCRIPT Line 2337  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 2479  ENDNEWSCRIPT Line 2346  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 2515  ENDNEWSCRIPT Line 2383  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 2548  $exportbut Line 2416  $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 2559  ENDCOURSEVERIFY Line 2427  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 2615  $uploadtag Line 2483  $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 2632  $help{'Load_Map'}</nobr> Line 2503  $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 2790  ENDBLOCK Line 2661  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 2882  ENDSUPFORM Line 2753  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.222  
changed lines
  Added in v.1.242


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