Diff for /loncom/interface/londocs.pm between versions 1.687 and 1.694

version 1.687, 2022/10/29 14:47:00 version 1.694, 2023/01/20 16:19:56
Line 205  sub validate_supppath { Line 205  sub validate_supppath {
                     $backto .= '&'.$items[$i];                      $backto .= '&'.$items[$i];
                     my $is_hidden;                      my $is_hidden;
                     unless ($got_supp) {                      unless ($got_supp) {
                         my ($supplemental) = &Apache::lonnet::get_supplemental($coursenum,$coursedom);                          my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
                         if (ref($supplemental) eq 'HASH') {                          if (ref($supplemental) eq 'HASH') {
                             if (ref($supplemental->{'hidden'}) eq 'HASH') {                              if (ref($supplemental->{'hidden'}) eq 'HASH') {
                                 %supphidden = %{$supplemental->{'hidden'}};                                  %supphidden = %{$supplemental->{'hidden'}};
Line 1207  sub docs_change_log { Line 1207  sub docs_change_log {
  }   }
  $r->print('</ul>');   $r->print('</ul>');
  if ($docslog{$id}{'logentry'}{'parameter_res'}) {   if ($docslog{$id}{'logentry'}{'parameter_res'}) {
     $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');              my ($title,$url) = split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'},3);
               if ($title eq '') {
                   ($title) = ($url =~ m{/([^/]+)$});
               }
               $r->print(&LONCAPA::map::qtescape($title).':<ul>');
     foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder','gradable') {      foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder','gradable') {
  if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {   if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
 # FIXME: internationalization seems wrong here  # FIXME: internationalization seems wrong here
Line 3109  sub update_parameter { Line 3113  sub update_parameter {
             my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);              my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
             $name=&LONCAPA::map::qtescape($name);              $name=&LONCAPA::map::qtescape($name);
             $url=&LONCAPA::map::qtescape($url);              $url=&LONCAPA::map::qtescape($url);
             next unless ($name && $url);              next unless $url;
             my $is_map;              my $is_map;
             if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {              if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {
                 $is_map = 1;                  $is_map = 1;
Line 3562  sub editor { Line 3566  sub editor {
     }      }
   
     if ((!$allowed) && ($folder =~ /^supplemental_\d+$/)) {      if ((!$allowed) && ($folder =~ /^supplemental_\d+$/)) {
         my ($supplemental) = &Apache::lonnet::get_supplemental($coursenum,$coursedom);          my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
         if (ref($supplemental) eq 'HASH') {          if (ref($supplemental) eq 'HASH') {
             if ((ref($supplemental->{'hidden'}) eq 'HASH') &&              if ((ref($supplemental->{'hidden'}) eq 'HASH') &&
                 (ref($supplemental->{'ids'}) eq 'HASH')) {                  (ref($supplemental->{'ids'}) eq 'HASH')) {
Line 4646  $form_end; Line 4650  $form_end;
         my ($enctext,$hidtext,$formhidden,$formurlhidden);          my ($enctext,$hidtext,$formhidden,$formurlhidden);
         if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {          if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
             $hidtext = ' checked="checked"';              $hidtext = ' checked="checked"';
             if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) {              if (($ishash) && (ref($filtersref->{'hiddenresource'}) eq 'ARRAY')) {
                 push(@{$filtersref->{'hiddenresource'}},$orderidx);                  push(@{$filtersref->{'hiddenresource'}},$orderidx);
             }              }
         }          }
Line 5802  sub handler { Line 5806  sub handler {
             if ($supplementalflag) {              if ($supplementalflag) {
                 ($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*)::(|1):::$/);                  ($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*)::(|1):::$/);
                 $foldername = &HTML::Entities::decode(&unescape($foldername));                  $foldername = &HTML::Entities::decode(&unescape($foldername));
                 my ($supplemental) = &Apache::lonnet::get_supplemental($coursenum,$coursedom);                  my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom);
                 if (ref($supplemental) eq 'HASH') {                  if (ref($supplemental) eq 'HASH') {
                     my ($suppmap,$suppmapnum);                      my ($suppmap,$suppmapnum);
                     if ($folder eq 'supplemental') {                      if ($folder eq 'supplemental') {
Line 6135  sub handler { Line 6139  sub handler {
                 'stpr' => 'Standard Problem',                  'stpr' => 'Standard Problem',
                 'news' => 'New sub-directory',                  'news' => 'New sub-directory',
                 'crpr' => 'Create Problem',                  'crpr' => 'Create Problem',
                   'swit' => 'Switch Server',
                 'drbx' => 'Drop Box',                  'drbx' => 'Drop Box',
                 'scuf' => 'External Scores (handgrade, upload, clicker)',                  'scuf' => 'External Scores (handgrade, upload, clicker)',
                 'bull' => 'Discussion Board',                  'bull' => 'Discussion Board',
Line 6293  FUFORM Line 6298  FUFORM
 SEDFFORM  SEDFFORM
         my $importcrsresform;          my $importcrsresform;
         my ($numdirs,$pickfile) =           my ($numdirs,$pickfile) = 
             &Apache::loncommon::import_crsauthor_form('crsresimportform','coursepath','coursefile',              &Apache::loncommon::import_crsauthor_form('coursepath','coursefile',
                                                       "resize_scrollbox('contentscroll','1','0');",                                                        "resize_scrollbox('contentscroll','1','0');",
                                                       undef,'res');                                                        undef,'res');
         if ($pickfile) {          if ($pickfile) {
             $importcrsresform=(<<CRSFORM);              $importcrsresform=(<<CRSFORM);
         <a class="LC_menubuttons_link" href="javascript:toggleImportCrsres('res','$numdirs');">          <a class="LC_menubuttons_link" href="javascript:toggleImportCrsres('res');">
         $lt{'imcr'}</a>$help{'Course_Resources'}          $lt{'imcr'}</a>$help{'Course_Resources'}
         <form action="/adm/coursedocs" method="post" name="crsresimportform" onsubmit="return validImportCrsRes();">          <form action="/adm/coursedocs" method="post" name="crsresimportform" onsubmit="return validImportCrsRes();">
         <fieldset id="importcrsresform" style="display: none;">          <fieldset id="importcrsresform" style="display: none;">
Line 6309  SEDFFORM Line 6314  SEDFFORM
         $lt{'title'}: <input type="textbox" name="crsrestitle" value="" $disabled />          $lt{'title'}: <input type="textbox" name="crsrestitle" value="" $disabled />
         </p>          </p>
         <input type="hidden" name="importdetail" value="" />          <input type="hidden" name="importdetail" value="" />
         <input type="submit" name="crsres" value="$lt{'impo'}" $disabled />          <input type="submit" name="crsres" value="$lt{'impo'}" $disabled /><br />
         </fieldset>          </fieldset>
         </form>          </form>
 CRSFORM  CRSFORM
Line 6329  CRSFORM Line 6334  CRSFORM
         { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap(\'map\');" />' => $importpubform },          { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap(\'map\');" />' => $importpubform },
         );          );
         if ($pickfile) {          if ($pickfile) {
             push(@importpubforma,{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{imcr}.'"  onclick="javascript:toggleImportCrsres(\'res\','."'$numdirs'".');"/>' => $importcrsresform});              push(@importpubforma,{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{imcr}.'"  onclick="javascript:toggleImportCrsres(\'res\');" />' => $importcrsresform});
  }   }
  $importpubform = &create_form_ul(&create_list_elements(@importpubforma));   $importpubform = &create_form_ul(&create_list_elements(@importpubforma));
         my $extresourcesform =          my $extresourcesform =
Line 6531  NROSTFORM Line 6536  NROSTFORM
 NWEBFORM  NWEBFORM
   
         my @ids=&Apache::lonnet::current_machine_ids();          my @ids=&Apache::lonnet::current_machine_ids();
         my %select_menus;          my $machines_str = "'".join("','",@ids)."'";
         my $numauthor = 0;          my (%is_home,%toppath,$rolehomes);
         my $numcrsdirs = 0;  
         my $toppath = "/priv/$env{'user.domain'}/$env{'user.name'}";   
         if ($env{'user.author'}) {          if ($env{'user.author'}) {
             $numauthor ++;  
             $select_menus{'author'}->{'text'} = &Apache::lonnet::plaintext('au');  
             if (grep(/^\Q$env{'user.home'}\E$/,@ids)) {              if (grep(/^\Q$env{'user.home'}\E$/,@ids)) {
                 my $is_home = 1;                  $is_home{'author'} = 1;
                 my %subdirs;  
                 &Apache::lonnet::recursedirs($is_home,'priv',$londocroot,$toppath,'',\%subdirs);  
                 $select_menus{'author'}->{'default'} = '/';   
                 $select_menus{'author'}->{'select2'}->{'/'} = '/';  
                 my @ordered = ('/');  
                 foreach my $relpath (sort { lc($a) cmp lc($b) } (keys(%subdirs))) {  
                     $select_menus{'author'}->{'select2'}->{$relpath} = $relpath;  
                     push(@ordered,$relpath);  
                 }  
                 $select_menus{'author'}->{'order'} = \@ordered;  
             } else {  
                 $select_menus{'author'}->{'select2'}->{'switch'} = &mt('Switch server required');  
                 $select_menus{'author'}->{'default'} = 'switch';  
                 $select_menus{'author'}->{'order'} = ['switch'];  
             }              }
               $rolehomes = '<input type="hidden" id="rolehome_author" name="rolehome_author" value="'.$env{'user.home'}.'" />'."\n";
         }          }
         my %roleshash = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',          my %roleshash = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',
                                                       ['active'],['ca','aa']);                                                        ['active'],['ca','aa']);
         my $crshome = $env{'course.'.$env{'request.course.id'}.'.home'};  
         my %by_roletype;          my %by_roletype;
         if (keys(%roleshash)) {          if (keys(%roleshash)) {
             foreach my $entry (keys(%roleshash)) {              foreach my $entry (keys(%roleshash)) {
                 my ($auname,$audom,$roletype) = split(/:/,$entry);                  my ($auname,$audom,$roletype) = split(/:/,$entry);
                 my $key = $entry;                  my $key = $entry;
                 $key =~ s/:/___/g;                  $key =~ s/:/___/g;
                 $by_roletype{$roletype}{$auname.'___'.$audom} = 1;                  my $author = $auname.'___'.$audom;
                 $select_menus{$key}->{'text'} = &Apache::lonnet::plaintext($roletype)." ($audom/$auname)";                  $by_roletype{$roletype}{$author} = 1;
                 my $rolehome = &Apache::lonnet::homeserver($auname,$audom);                  my $rolehome = &Apache::lonnet::homeserver($auname,$audom);
                 if (grep(/^\Q$rolehome\E$/,@ids)) {                      $toppath{$author} = "/priv/$audom/$auname";
                     my $is_home = 1;                  if (grep(/^\Q$rolehome\E$/,@ids)) {
                     my (%subdirs,@ordered);                      $is_home{$author} = 1;
                     my $toppath="/priv/$audom/$auname";  
                     &Apache::lonnet::recursedirs($is_home,'priv',$londocroot,$toppath,'',\%subdirs);  
                     $select_menus{$key}->{'default'} = '/';  
                     $select_menus{$key}->{'select2'}->{'/'} = '/';  
                     my @ordered = ('/');  
                     foreach my $relpath (sort { lc($a) cmp lc($b) } (keys(%subdirs))) {  
                         $select_menus{$key}->{'select2'}->{$relpath} = $relpath;  
                         push(@ordered,$relpath);  
                     }  
                     $select_menus{$key}->{'order'} = \@ordered;  
                 } else {  
                     $select_menus{$key}->{'select2'}->{'switch'} = &mt('Switch server required');  
                     $select_menus{$key}->{'default'} = 'switch';  
                     $select_menus{$key}->{'order'} = ['switch'];  
                 }  
                 $numauthor ++;  
             }  
         }  
         my ($pickdir,$showtitle);  
         if ($numauthor) {  
             my @order;  
             my $defrole;  
             if ($env{'user.author'}) {  
                 push(@order,'author');  
                 $defrole = 'author';  
             }  
             if (keys(%by_roletype)) {  
                 foreach my $possrole ('ca','aa') {  
                     if (ref($by_roletype{$possrole}) eq 'HASH') {  
                         foreach my $author (sort { lc($a) cmp lc($b) } (keys(%{$by_roletype{$possrole}}))) {  
                             unless ($defrole) {  
                                 $defrole = $author;  
                             }  
                             push(@order,$author.'___'.$possrole);  
                         }  
                     }  
                 }                  }
                   $rolehomes .= '<input type="hidden" id="rolehome_coauthor_'.$roletype.'_'.$audom.'/'.$auname.'" '.
                                 'name="rolehome_coauthor" value="'.$roletype.'='.$audom.'/'.$auname.'='.$rolehome.'" />'."\n";
             }              }
             $select_menus{'course'}->{'text'} = &mt('Course Resource');          }
             if (grep(/^\Q$crshome\E$/,@ids)) {          my $crshome = $env{'course.'.$env{'request.course.id'}.'.home'};
                 my $is_home = 1;          if (grep(/^\Q$crshome\E$/,@ids)) {
                 my %subdirs;              $is_home{'course'} = 1;
                 my $toppath="/priv/$coursedom/$coursenum";          }
                 &Apache::lonnet::recursedirs($is_home,'priv',$londocroot,$toppath,'',\%subdirs);          $rolehomes .= '<input type="hidden" id="rolehome_course" name="rolehome_course" value="'.$crshome.'" />'."\n";
                 $numcrsdirs = keys(%subdirs);          my $pickdir = $lt{'loca'}.
                 $select_menus{'course'}->{'default'} = '/';                     '<select name="authorrole" onchange="populateDirSelects(this.form,'."'authorrole','authorpath'".',1,1,0);">'."\n".
                 $select_menus{'course'}->{'select2'}->{'/'} = '/';                     '<option value="" selected="selected">'.&mt('Select').'</option>'."\n";
                 my @ordered = ('/');          if ($env{'user.author'}) {
                 foreach my $relpath (sort { lc($a) cmp lc($b) } (keys(%subdirs))) {              $pickdir .= '<option value="author">'.&Apache::lonnet::plaintext('au').'</option>'."\n";
                     $select_menus{'course'}->{'select2'}->{$relpath} = $relpath;          }
                     push(@ordered,$relpath);          if (keys(%by_roletype)) {
                 }              foreach my $possrole ('ca','aa') {
                 $select_menus{'course'}->{'order'} = \@ordered;                  if (ref($by_roletype{$possrole}) eq 'HASH') {
             } else {                      my $roletitle = &Apache::lonnet::plaintext($possrole);
                 $select_menus{'course'}->{'select2'}->{'switch'} = &mt('Switch server required');                      foreach my $author (sort { lc($a) cmp lc($b) } (keys(%{$by_roletype{$possrole}}))) {
                 $select_menus{'course'}->{'default'} = 'switch';                          my ($none,$where,$auname,$audom) = split(/\//,$toppath{$author});
                 $select_menus{'course'}->{'order'} = ['switch'];                          $pickdir .= '<option value="'.$author.'___'.$possrole.'">'.
             }                                       $roletitle." ($audom/$auname)</option>\n";
             push(@order,'course');  
             $pickdir = $lt{'loca'}.  
                        &Apache::loncommon::linked_select_forms('courseresform','<br />'.$lt{'dire'},  
                                                                $defrole,'authorrole','authorpath',  
                                                                \%select_menus,\@order,'toggleCrsResTitle();',  
                                                                '','priv').'<br />';  
             $showtitle = 'none';  
         } else {  
             my $is_home;  
             $showtitle = 'inline';  
             if (grep(/^\Q$crshome\E$/,@ids)) {  
                 $is_home = 1;  
                 $pickdir .= '<input type="hidden" name="authorrole" value="course" />';   
                 my $toppath="/priv/$coursedom/$coursenum'}";  
                 my %subdirs;  
                 &Apache::lonnet::recursedirs($is_home,'priv',$londocroot,$toppath,'',\%subdirs);  
                 $numcrsdirs = keys(%subdirs);   
                 if ($numcrsdirs) {  
                     $pickdir .= &mt('Directory: ').'<select name="authorpath">'."\n".  
                                  '<option value="/">/</option>'."\n";  
                     foreach my $key (sort { lc($a) cmp lc($b) } (keys(%subdirs))) {  
                         $pickdir .= '<option value="'.$key.'">'.$key.'</option>'."\n";  
                     }                      }
                     $pickdir .= '</select>';  
                 } else {  
                     $pickdir .= '<input type="hidden" name="authorpath" value="/" />'."\n";     
                 }                  }
             }              }
         }          }
           $pickdir .= '<option value="course">'.&mt('Course Resource').'</option>'."\n".
                       '</select><br />'."\n".
                       $lt{'dire'}.
                       '<select name="authorpath" onchange="toggleCrsResTitle();">'.
                       '<option value=""></option>'.
                       '</select><br />'."\n";
   
         my %seltemplate_menus;          my %seltemplate_menus;
         my @files = &Apache::lonhomework::get_template_list('problem');          my @files = &Apache::lonhomework::get_template_list('problem');
Line 6700  NWEBFORM Line 6634  NWEBFORM
         my $templatepreview =  '<a href="#" target="sample" onclick="javascript:getExample(600,420,\'yes\',true);  return false;">'.          my $templatepreview =  '<a href="#" target="sample" onclick="javascript:getExample(600,420,\'yes\',true);  return false;">'.
                                '<span id="newresexample">'.&mt('Example').'<span></a>';                                 '<span id="newresexample">'.&mt('Example').'<span></a>';
         my $crsresform=(<<RESFORM);          my $crsresform=(<<RESFORM);
         <a class="LC_menubuttons_link" href="javascript:toggleCrsRes('res','$numauthor','$numcrsdirs');">          <a class="LC_menubuttons_link" href="javascript:toggleCrsRes('res');">
         $lt{'stpr'}</a>$help{'Course_Resource'}          $lt{'stpr'}</a>$help{'Course_Resource'}
         <form action="/adm/coursedocs" method="post" name="courseresform">          <form action="/adm/coursedocs" method="post" name="courseresform">
         <fieldset id="crsresform" style="display:none;">          <fieldset id="crsresform" style="display:none;">
Line 6708  NWEBFORM Line 6642  NWEBFORM
         <input type="hidden" name="active" value="bb" />          <input type="hidden" name="active" value="bb" />
         <p>          <p>
         $pickdir          $pickdir
           <div id="newstdproblem" style="display:none;">
         <span class="LC_nobreak">$lt{'news'}?&nbsp;          <span class="LC_nobreak">$lt{'news'}?&nbsp;
         <label><input type="radio" name="newsubdir" value="0" onclick="toggleNewsubdir(this.form);" checked="checked" $disabled />No</label>          <label><input type="radio" name="newsubdir" value="0" onclick="toggleNewsubdir(this.form);" checked="checked" $disabled />No</label>
         &nbsp;          &nbsp;
Line 6718  NWEBFORM Line 6653  NWEBFORM
         $lt{'fnam'}          $lt{'fnam'}
         <input type="text" size="20" name="newresourcename" autocomplete="off" $disabled />          <input type="text" size="20" name="newresourcename" autocomplete="off" $disabled />
         <p>          <p>
         <div id="newresource" style="display:$showtitle">          <div id="newresource" style="display:none">
         $lt{'addp'}          $lt{'addp'}
         <label><input type="radio" name="newresourceadd" value="0" checked="checked" onclick="toggleNewInCourse(this.form);" $disabled />          <label><input type="radio" name="newresourceadd" value="0" checked="checked" onclick="toggleNewInCourse(this.form);" $disabled />
         $lt{'no'}</label>&nbsp;&nbsp;          $lt{'no'}</label>&nbsp;&nbsp;
Line 6743  NWEBFORM Line 6678  NWEBFORM
         <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />          <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
         <input type="submit" name="newcrs" value="$lt{'crpr'}" $disabled />          <input type="submit" name="newcrs" value="$lt{'crpr'}" $disabled />
         </span>          </span>
           </div>
           <div id="stdprobswitch" style="display:none;">
           $rolehomes
           <input type="button" name="switchfornewprob" value="$lt{'swit'}" onclick="switchForProb();" />
           </div>
         </fieldset>          </fieldset>
         </form>          </form>
   
Line 6841  NGFFORM Line 6781  NGFFORM
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{stpr}.'" onclick="javascript:toggleCrsRes(\'res\','."'$numauthor','$numcrsdirs'".');" />'=>$crsresform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{stpr}.'" onclick="javascript:toggleCrsRes(\'res\');" />'=>$crsresform},
         );          );
         $gradingform = &create_form_ul(&create_list_elements(@gradingforma));          $gradingform = &create_form_ul(&create_list_elements(@gradingforma));
   
Line 7477  sub editing_js { Line 7417  sub editing_js {
                                           tinc    => 'Title in course',                                            tinc    => 'Title in course',
                                           sunm    => 'Sub-directory name',                                            sunm    => 'Sub-directory name',
                                           edri    => 'Editing rights unavailable for your current role.',                                            edri    => 'Editing rights unavailable for your current role.',
                                             sele    => 'Select',
                                             swit    => 'Switch server required',
                                         );                                          );
     &js_escape(\%js_lt);      &js_escape(\%js_lt);
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
Line 7488  sub editing_js { Line 7430  sub editing_js {
     my $backtourl;      my $backtourl;
     my $toplevelmain = &escape(&default_folderpath($coursenum,$coursedom,$navmapref));      my $toplevelmain = &escape(&default_folderpath($coursenum,$coursedom,$navmapref));
     my $toplevelsupp = &supplemental_base();      my $toplevelsupp = &supplemental_base();
       my $showfile_js = &Apache::loncommon::show_crsfiles_js();
       my @ids=&Apache::lonnet::current_machine_ids();
       my $machines_str = "'".join("','",@ids)."'";
     if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) {      if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) {
         my $caller = $1;          my $caller = $1;
         if ($caller =~ /^supplemental/) {          if ($caller =~ /^supplemental/) {
Line 7840  function toggleMap(caller) { Line 7784  function toggleMap(caller) {
     return;      return;
 }  }
   
 function toggleCrsRes(caller,numauthorrole,numcrsdirs) {  function toggleCrsRes(caller) {
     var disp = 'none';      var disp = 'none';
     if (document.getElementById('crsresform')) {      if (document.getElementById('crsresform')) {
         if (caller == 'res') {          if (caller == 'res') {
             var curr = document.getElementById('crsresform').style.display;              var form = document.getElementById('crsresform');
               var curr = form.style.display;
             if (curr == 'none') {              if (curr == 'none') {
                 disp='block';                  disp='block';
                 numauthor = parseInt(numauthorrole);                  document.courseresform.authorrole.selectedIndex = 0;
                 if (numauthor > 0) {                  document.courseresform.authorpath.selectedIndex = 0;
                     document.courseresform.authorrole.selectedIndex = 0;                  document.courseresform.newresourceadd.selectedIndex = 0;
                     select1priv_changed();                  populateDirSelects(form,'authorrole','authorpath',1,0,0);
                     document.courseresform.authorpath.selectedIndex = 0;                  toggleNewInCourse(document.courseresform);
                     document.courseresform.newresourceadd.selectedIndex = 0;                  if (document.getElementById('newresource')) {
                     toggleNewInCourse(document.courseresform);                      document.getElementById('newresource').style.display = 'none';
                     if (document.getElementById('newresource')) {  
                         document.getElementById('newresource').style.display = 'none';  
                     }  
                 } else {  
                     if (numcrsdirs) {  
                         document.courseresform.authorpath.selectedIndex = 0;  
                     }  
                 }                  }
                 if (document.courseresform.newresusetemp.length) {                  if (document.courseresform.newresusetemp.length) {
                     document.courseresform.newresusetemp[0].checked = true;                      document.courseresform.newresusetemp[0].checked = true;
Line 7914  function toggleNewsubdir(form) { Line 7852  function toggleNewsubdir(form) {
   
 function toggleCrsResTitle() {  function toggleCrsResTitle() {
     if (document.getElementById('newresource')) {      if (document.getElementById('newresource')) {
         if (document.courseresform.authorrole.options[document.courseresform.authorrole.selectedIndex].value == 'course') {          var selloc = document.courseresform.authorrole.options[document.courseresform.authorrole.selectedIndex].value;
           if (selloc == 'course') {
             document.getElementById('newresource').style.display = 'inline';              document.getElementById('newresource').style.display = 'inline';
             document.courseresform.newresourceadd[0].checked = true;              document.courseresform.newresourceadd[0].checked = true;
             toggleNewInCourse(document.courseresform);              toggleNewInCourse(document.courseresform);
         } else {          } else {
             document.getElementById('newresource').style.display = 'none';              document.getElementById('newresource').style.display = 'none';
         }          }
     }       }
       if (document.getElementById('newstdproblem')) {
           if (document.courseresform.authorpath.options[document.courseresform.authorpath.selectedIndex].value == 'switch') {
               document.getElementById('newstdproblem').style.display = 'none'; 
               if (document.getElementById('stdprobswitch')) {
                   document.getElementById('stdprobswitch').style.display = 'block'; 
               }
           } else {
               document.getElementById('newstdproblem').style.display = 'block';
               if (document.getElementById('stdprobswitch')) {
                   document.getElementById('stdprobswitch').style.display = 'none';
               }
           }
       }
 }  }
   
 function toggleNewInCourse(form) {  function toggleNewInCourse(form) {
Line 8001  function getExample(width,height,scrolli Line 7953  function getExample(width,height,scrolli
     }      }
 }  }
   
 function toggleImportCrsres(caller,dircount) {  function toggleImportCrsres(caller) {
     var disp = 'none';      var disp = 'none';
     if (document.getElementById('importcrsresform')) {      if (document.getElementById('importcrsresform')) {
         if (caller == 'res') {          if (caller == 'res') {
             var numdirs = parseInt(dircount);  
             var curr = document.getElementById('importcrsresform').style.display;              var curr = document.getElementById('importcrsresform').style.display;
             if (curr == 'none') {              if (curr == 'none') {
                 disp='block';                  disp='block';
                 if (numdirs > 1) {                  populateCrsSelects(document.crsresimportform,'coursepath','coursefile',1,'',1,0,1,1);
                     select1res_changed();  
                 }  
             }              }
         }          }
         document.getElementById('importcrsresform').style.display=disp;          document.getElementById('importcrsresform').style.display=disp;
Line 8019  function toggleImportCrsres(caller,dirco Line 7968  function toggleImportCrsres(caller,dirco
     }      }
     return;      return;
 }  }
   
   $showfile_js
   
   function populateDirSelects(form,locsel,dirsel,setdir,recurse,nonemptydir) {
       var location = form.elements[locsel].options[form.elements[locsel].selectedIndex].value;
       if ((setdir) && (dirsel != null) && (dirsel != 'undefined') && (dirsel != '')) {
           var selelem = form.elements[dirsel];
           var i, numfiles = selelem.options.length -1;
           if (numfiles >=0) {
               for (i = numfiles; i >= 0; i--) {
                   selelem.remove(i);
               }
           }
           if ((location == '') || (location == null) || (location == 'undefined')) {
                if (selelem.options.length == 0) {
                    selelem.options[selelem.options.length] = new Option('','');
                    selelem.selectedIndex = 0;
                }
                if (document.getElementById('newstdproblem')) {
                    document.getElementById('newstdproblem').style.display = 'none';
                }
                return;
           }
           var machineIds = new Array($machines_str);
           var athome = 0;
           var role = location;
           if ((location == 'author') || (location == 'course')) {
               if (document.getElementById('rolehome_'+location)) {
                   var currhome = document.getElementById('rolehome_'+location).value;
                   if ((currhome != '') && (currhome != null) && (currhome != 'undefined')) {
                       if (machineIds.includes(currhome)) {
                           athome = 1;
                       }
                   }
               }
           } else {
               const roleinfo = location.split('___');
               role = encodeURIComponent(roleinfo[0]+'./'+roleinfo[1]);
               if (document.getElementById('rolehome_coauthor_'+roleinfo[1]+'_'+roleinfo[0])) {
                   var currhome = document.getElementById('rolehome_coauthor_'+roleinfo[1]+'_'+roleinfo[0]).value;
                   if ((currhome != '') && (currhome != null) && (currhome != 'undefined')) {
                       if (machineIds.includes(currhome)) {
                           athome = 1;
                       }
                   }
               }
           }
           if (athome) {
               if (document.getElementById('stdprobswitch')) {
                   document.getElementById('stdprobswitch').style.display = 'none';
               }
               if (document.getElementById('newstdproblem')) {
                   document.getElementById('newstdproblem').style.display = 'none';
               }
               var http = new XMLHttpRequest();
               var url = "/adm/courseauthor";
               var params = "role="+role+"&rec="+recurse+"&nonempty="+nonemptydir;
               http.open("POST", url, true);
               http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
               http.onreadystatechange = function() {
                   if (http.readyState == 4 && http.status == 200) {
                       var data = JSON.parse(http.responseText);
                       if (Array.isArray(data.dirs)) {
                           var len = data.dirs.length;
                           if (len) {
                               if (len > 1) {
                                   selelem.options[selelem.options.length] = new Option('$js_lt{sele}','');
                               }
                           }
                           if (len) {
                               var j;
                               for (j = 0; j < len; j++) {
                                   selelem.options[selelem.options.length] = new Option(data.dirs[j],data.dirs[j]);
                               }
                               selelem.selectedIndex = 0;
                           }
                       }
                   }
               }
               http.send(params);
           } else {
               selelem.options[selelem.options.length] = new Option('$js_lt{swit}','switch');
               selelem.selectedIndex = 0;
               if (document.getElementById('stdprobswitch')) {
                   document.getElementById('stdprobswitch').style.display = 'block';
               }
               if (document.getElementById('newstdproblem')) {
                   document.getElementById('newstdproblem').style.display = 'none';
               }
           }
       }
       return;
   }
   
   function switchForProb() {
       if (document.courseresform.authorpath.options[document.courseresform.authorpath.selectedIndex].value == 'switch') {
           var url = '/adm/switchserver?otherserver=';
           var newhostid = '';
           var role = '';
           var selloc = document.courseresform.authorrole.options[document.courseresform.authorrole.selectedIndex].value;
           if (selloc == 'author') {
               newhostid = document.courseresform.rolehome_author.value;
               role = "au./&js_escape($env{'user.domain'})/";
           } else if (selloc == 'course') {
               newhostid = document.courseresform.rolehome_course.value;
               role = "&js_escape($env{'request.role'})";
           } else {
               var items = new Array();
               items = selloc.split('___');
               var len = document.courseresform.rolehome_coauthor.length;
               if (null == len) {
                   var currval = document.courseresform.rolehome_coauthor.value;
                   if (null != currval) {
                       var info = new Array();
                       info = currval.split('=');
                       newhostid = info[2];
                       role = info[0]+'./'+info[1];
                   }
               } else {
                   for (var i=0; i<len; i++) {
                       var currval = document.courseresform.rolehome_coauthor[i].value;
                       if (null != currval) {
                           var info = new Array();
                           info = currval.split('=');
                           if ((info[1] == items[1]+'/'+items[0]) && (info[0] == items[2])) {
                               newhostid = info[2];
                               role = info[0]+'./'+info[1];
                               break;
                           }
                       }
                   }
               }
           }
           if (newhostid != '') {
               url += newhostid;
               if (role != '') {
                   url += '&role='+role;
               }
               document.location.href = url;
           }
       }
       return;
   }
   
 function makeims(imsform) {  function makeims(imsform) {
     if ((imsform.uploaddoc.value == '')  || (!imsform.uploaddoc.value)) {      if ((imsform.uploaddoc.value == '')  || (!imsform.uploaddoc.value)) {

Removed from v.1.687  
changed lines
  Added in v.1.694


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