Diff for /loncom/interface/loncourserespicker.pm between versions 1.6 and 1.7

version 1.6, 2013/05/21 18:54:15 version 1.7, 2013/11/12 14:36:07
Line 37  loncourserespicker provides an interface Line 37  loncourserespicker provides an interface
 resources are to be either:  resources are to be either:
   
 (a) exported to an IMS Content Package  (a) exported to an IMS Content Package
 (b) subject to access blocking for the duriation of an exam/quiz.    (b) subject to access blocking for the duriation of an exam/quiz.
   (c) dumped to an Authoring Space
   
 =head1 DESCRIPTION  =head1 DESCRIPTION
   
Line 59  uncheck will propagate up through the hi Line 60  uncheck will propagate up through the hi
 a higher level to become unchecked.  a higher level to become unchecked.
   
 There is a submit button, which will be named differently according to the   There is a submit button, which will be named differently according to the 
 content in which resource/folder selection is being made.  context in which resource/folder selection is being made.
   
 The two contexts currently supported are: IMS export and selection of  The three contexts currently supported are: IMS export, selection of
 content to be subject to access restructions for the duration of an  content to be subject to access restructions for the duration of an
 exam.    exam, and selection of items for dumping to an Authoring Space.
   
 =head1 INTERNAL SUBROUTINES  =head1 INTERNAL SUBROUTINES
   
Line 74  select items.  Checking a folder causes Line 75  select items.  Checking a folder causes
 within the folder. Unchecking a resource causing unchecking of folders  within the folder. Unchecking a resource causing unchecking of folders
 containing the item back up to the top level.  containing the item back up to the top level.
   
 Inputs: 7.  Inputs: 9.
    - $navmap  -- Reference to LON-CAPA navmap object      - $navmap  -- Reference to LON-CAPA navmap object 
                 (encapsulates information about resources in the course).                   (encapsulates information about resources in the course). 
   
Line 95  Inputs: 7. Line 96  Inputs: 7.
    - $block  -- An internal ID (integer) used to track which exam     - $block  -- An internal ID (integer) used to track which exam
                 block currently being configured.                  block currently being configured.
   
      - $preamble -- HTML form elements used to select Authoring Space
                     if more than one available, and also set name of 'Folder 
                     in Authoring Space' where content will be dumped, when
                     context is 'dumpdocs'.
   
      - $numhome -- number of possible Authoring Spaces where content could
                    be dumped when context is 'dumpdocs'.
   
      - $uploadedfiles -- Reference to hash: keys are paths to files in
                          /home/httpd/lonUsers/$cdom/$1/$2/$3/$cnum/userfiles.
   
   
 Output: $output is the HTML mark-up for display/selection of content  Output: $output is the HTML mark-up for display/selection of content
         items in the pop-up window.          items in the pop-up window.
Line 111  Inputs: 7. Line 123  Inputs: 7.
    - $numcount -- Total numer of folders and resources in course.     - $numcount -- Total numer of folders and resources in course.
   
    - $context -- Context in which resources are being displayed     - $context -- Context in which resources are being displayed
                  (imsexport or examblock).                    (imsexport, examblock or dumpdocs). 
   
    - $formname --  Name of form.     - $formname --  Name of form.
   
Line 121  Inputs: 7. Line 133  Inputs: 7.
   
    - $checked_maps -- Reference to array of folders currently checked.     - $checked_maps -- Reference to array of folders currently checked.
   
 Output: 1. Javascript (witthin <script></script> tags.  Output: 1. Javascript (within <script></script> tags.
   
   
 =item &get_navmap_object()   =item &get_navmap_object() 
Line 132  no object instantiated. Line 144  no object instantiated.
 Inputs: 2.  Inputs: 2.
    - $crstype -- Container type: Course or Community     - $crstype -- Container type: Course or Community
   
    - $context -- Context: imsexport or examblock     - $context -- Context: imsexport, examblock or dumpdocs
   
   
   =item &clean()
    
   Takes incoming title and replaces non-alphanumeric characters with underscore,
   so title can be used as suggested file name (with appended extension) for file
   copied from course to Authoring space.
   
   
   =item &enumerate_course_contents()
   
   Create hashes of maps (for folders/pages) and symbs (for resources) in
   a course, where keys are numbers (starting with 1) and values are
   map url, or symb, for an iteration through the course, as seen by
   a Course Coordinator. Used to generate numerical IDs to facilitate
   (a) storage of lists of maps or resources to be blocked during an exam,
   (b) processing selected form element during dumping of selected course
       content to Authoring space.
   
   Inputs: 7 
   
         $navmap - navmaps object
   
         $map_url - reference to hash to contain URLs of maps in course
   
         $resource_symb - reference to hash to contain symbs for
                          resources in course
   
         $title_ref - reference to hash containing titles for items in
                      course
   
         $context - examblock or dumpdocs
   
         $cdom - course's domain
   
         $cnum - courseID 
   
   Outputs: None
   
   Side Effects: $map_url and $resource_symb hashrefs are populated.
   
   
 =over  =over
   
Line 153  use Apache::lonlocal; Line 206  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 sub create_picker {  sub create_picker {
     my ($navmap,$context,$formname,$crstype,$blockedmaps,$blockedresources,$block) = @_;      my ($navmap,$context,$formname,$crstype,$blockedmaps,$blockedresources,$block,$preamble,$numhome,$uploadedfiles) = @_;
     return unless (ref($navmap));      return unless (ref($navmap));
     my ($it,$output,$numdisc,%maps,%resources,%discussiontime,%currmaps,%currresources);      my ($it,$output,$numdisc,%maps,%resources,%discussiontime,%currmaps,%currresources,%files);
     $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);      $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
     if (ref($blockedmaps) eq 'HASH') {      if (ref($blockedmaps) eq 'HASH') {
         %currmaps = %{$blockedmaps};          %currmaps = %{$blockedmaps};
     }      }
     if (ref($blockedresources) eq 'HASH') {      if (ref($blockedresources) eq 'HASH') {
         %currresources = %{$blockedresources};          %currresources = %{$blockedresources};
       } elsif (ref($uploadedfiles) eq 'HASH') {
           %files = %{$uploadedfiles};
     }      }
     my @checked_maps;      my @checked_maps;
     my $curRes;      my $curRes;
Line 174  sub create_picker { Line 229  sub create_picker {
     my %children = ();      my %children = ();
     my %hierarchy = ();      my %hierarchy = ();
     my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons");      my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons");
     my $whitespace =       my $whitespace =
         '<img src="'.$location.'/whitespace_21.gif" class="LC_docs_spacer" alt="" />';          '<img src="'.$location.'/whitespace_21.gif" class="LC_docs_spacer" alt="" />';
   
     my $onsubmit;      my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       my $crsprefix = &propath($cdom,$cnum).'/userfiles/';
   
       my ($info,$display,$onsubmit,$togglebuttons);
     if ($context eq 'examblock') {      if ($context eq 'examblock') {
         my $maps_elem = 'docs_maps_'.$block;          my $maps_elem = 'docs_maps_'.$block;
         my $res_elem = 'docs_resources_'.$block;          my $res_elem = 'docs_resources_'.$block;
         $onsubmit = ' onsubmit="return writeToOpener('."'$maps_elem','$res_elem'".');"';          $onsubmit = ' onsubmit="return writeToOpener('."'$maps_elem','$res_elem'".');"';
           $info = &mt('Items in '.lc($crstype).' for which access will be blocked.');
     }      }
     my $display =      if ($context eq 'dumpdocs') {
        '<form name="'.$formname.'" action="" method="post"'.$onsubmit.'>'."\n".          $info = '<span class="LC_fontsize_medium">'.
        '<p>';                  &mt('Choose the uploaded course items and templated pages/problems to be copied to Authoring space.').
     if ($context eq 'imsexport') {                  '</span><br /><br />';
         $display .= &mt('Choose which items you wish to export from your '.          $startcount = 3 + $numhome;
                         $crstype.'.');          $onsubmit = ' onsubmit="return checkUnique(document.'.$formname.',document.'.$formname.'.archive);"';
       } elsif ($context eq 'imsexport') {
           $info = &mt('Choose which items you wish to export from your '.$crstype.'.');
         $startcount = 5;          $startcount = 5;
     } elsif ($context eq 'examblock') {  
         $display .= &mt('Items in '.lc($crstype).' for which access will be blocked.');  
     }      }
     $display .= '</p>';      $togglebuttons = '<input type="button" value="'.&mt('check all').'" '.
                        'onclick="javascript:checkAll(document.'.$formname.'.archive)" />'.
                        '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                        ' onclick="javascript:uncheckAll(document.'.$formname.'.archive)" />';
       $display = '<form name="'.$formname.'" action="" method="post"'.$onsubmit.'>'."\n";
     if ($context eq 'imsexport') {      if ($context eq 'imsexport') {
         $display .= '<div class="LC_columnSection">'."\n".          $display .= $info.
                       '<div class="LC_columnSection">'."\n".
                     '<fieldset>'.                      '<fieldset>'.
                     '<legend>'.&mt('Content items').'</legend>'."\n";                      '<legend>'.&mt('Content items').'</legend>'."\n".
     }                      $togglebuttons.
     $display .=                       '</fieldset>';
         '<input type="button" value="'.&mt('check all').'" '.          %discussiontime = &Apache::lonnet::dump('discussiontimes',$cdom,$cnum);
         'onclick="javascript:checkAll(document.'.$formname.'.archive)" />'.  
         '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.  
         ' onclick="javascript:uncheckAll(document.'.$formname.'.archive)" />';  
     if ($context eq 'imsexport') {  
         $display .= '</fieldset>';  
         %discussiontime =  
             &Apache::lonnet::dump('discussiontimes',  
                                   $env{'course.'.$env{'request.course.id'}.'.domain'},  
                                   $env{'course.'.$env{'request.course.id'}.'.num'});  
         $numdisc = keys(%discussiontime);          $numdisc = keys(%discussiontime);
         if ($numdisc > 0) {          if ($numdisc > 0) {
             $display .=               $display .= 
Line 221  sub create_picker { Line 277  sub create_picker {
                 ' onclick="javascript:uncheckAll(document.'.$formname.'.discussion)" />'.                  ' onclick="javascript:uncheckAll(document.'.$formname.'.discussion)" />'.
                 '</fieldset>';                  '</fieldset>';
         }          }
         $display .= '</div>';                $display .= '</div>';
       } elsif ($context eq 'examblock') {
           $display .= $info.$togglebuttons;
       } elsif ($context eq 'dumpdocs') {
           $display .= $preamble.
                       '<div class="LC_left_float">'.
                       '<fieldset>'.
                       '<legend>'.&mt('Content to copy').('&nbsp;'x4).$togglebuttons.'</legend>'.
                       $info;
     }      }
     my $lastcontainer = $startcount;      my $lastcontainer = $startcount;
     $display .= &Apache::loncommon::start_data_table()      $display .= &Apache::loncommon::start_data_table()
Line 233  sub create_picker { Line 297  sub create_picker {
         }          }
     } elsif ($context eq 'examblock') {      } elsif ($context eq 'examblock') {
         $display .= '<th>'.&mt('Access blocked?').'</th>';          $display .= '<th>'.&mt('Access blocked?').'</th>';
       } elsif ($context eq 'dumpdocs') {
           $display .= '<th>'.&mt('Copy?').'</th>'.
                       '<th>'.&mt("Title in $crstype").
                       '<th>'.&mt('Internal Identifier').'</th>'.
                       '<th>'.&mt('Save as ...').'</th>';
     }      }
     $display .= &Apache::loncommon::end_data_table_header_row();      $display .= &Apache::loncommon::end_data_table_header_row();
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if (ref($curRes)) {  
              $count ++;  
         }  
         if ($curRes == $it->BEGIN_MAP()) {          if ($curRes == $it->BEGIN_MAP()) {
             $depth++;              $depth++;
             $parent{$depth} = $lastcontainer;              $parent{$depth} = $lastcontainer;
Line 250  sub create_picker { Line 316  sub create_picker {
         if (ref($curRes)) {          if (ref($curRes)) {
             my $symb = $curRes->symb();              my $symb = $curRes->symb();
             my $ressymb = $symb;              my $ressymb = $symb;
             if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) {              if ($context eq 'dumpdocs') {
                   next unless (($curRes->src() =~ m{^\Q/uploaded/$cdom/$cnum/\E(docs|supplemental|simplepage)}) ||
                                ($curRes->src() =~ m{^\Q/uploaded/$cdom/$cnum/\E(default|supplemental)_\d+\.(sequence|page)}) ||
                                ($curRes->src() eq '/res/lib/templates/simpleproblem.problem') ||
                                ($curRes->src() =~ m{^/adm/$match_domain/$match_username/\d+/smppg}));
               } elsif ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) {
                 unless ($ressymb =~ m|adm/wrapper/adm|) {                  unless ($ressymb =~ m|adm/wrapper/adm|) {
                     $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                      $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                 }                  }
             }              }
             my $currelem = $count+$boards+$startcount;              $count ++;
               my $currelem;
               if ($context eq 'imsexport') {
                   $currelem = $count+$boards+$startcount;
               } else {
                   $currelem = $count+$startcount;
               }
             $display .= &Apache::loncommon::start_data_table_row().              $display .= &Apache::loncommon::start_data_table_row().
                        '<td>'."\n".                         '<td>'."\n".
                        '<input type="checkbox" name="archive" value="'.$count.'" ';                         '<input type="checkbox" name="archive" value="'.$count.'" ';
             if (($curRes->is_sequence()) || ($curRes->is_page())) {              if (($curRes->is_sequence()) || ($curRes->is_page())) {
                 $lastcontainer = $currelem;                  $lastcontainer = $currelem;
                 $display .= 'onclick="javascript:checkFolder(this.form,'."'$currelem'".')" ';                  $display .= 'onclick="javascript:checkFolder(document.'.$formname.','."'$currelem'".')" ';
                 my $mapurl = (&Apache::lonnet::decode_symb($symb))[2];                  my $mapurl = (&Apache::lonnet::decode_symb($symb))[2];
                 if ($currmaps{$mapurl}) {                  if ($currmaps{$mapurl}) {
                     $display .= 'checked="checked"';                      $display .= 'checked="checked"';
Line 271  sub create_picker { Line 348  sub create_picker {
                 if ($curRes->is_problem()) {                  if ($curRes->is_problem()) {
                     $numprobs ++;                      $numprobs ++;
                 }                  }
                 $display .= 'onclick="javascript:checkResource(this.form,'."'$currelem'".')" ';                  $display .= 'onclick="javascript:checkResource(document.'.$formname.','."'$currelem'".')" ';
                 if ($currresources{$symb}) {                  if ($currresources{$symb}) {
                     $display .= 'checked="checked"';                      $display .= 'checked="checked"';
                 }                  }
             }              }
             $display .= ' />'."\n";              $display .= ' />'."\n";
               if ($context eq 'dumpdocs') {
                   $display .= '</td><td valign="top">';
               }
             for (my $i=0; $i<$depth; $i++) {              for (my $i=0; $i<$depth; $i++) {
                 $display .= "$whitespace\n";                  $display .= "$whitespace\n";
             }              }
Line 303  sub create_picker { Line 383  sub create_picker {
                     }                      }
                 }                  }
             }              }
             $display .= '&nbsp;'.$curRes->title().'</td>'."\n";              $display .= '&nbsp;'.$curRes->title().$whitespace.'</td>'."\n";
   
             if ($context eq 'imsexport') {              if ($context eq 'imsexport') {
 # Existing discussion posts?  # Existing discussion posts?
Line 315  sub create_picker { Line 395  sub create_picker {
                 } elsif ($numdisc > 0) {                  } elsif ($numdisc > 0) {
                     $display .= '<td>&nbsp;</td>'."\n";                      $display .= '<td>&nbsp;</td>'."\n";
                 }                  }
               } elsif ($context eq 'dumpdocs') {
                   my $src = $curRes->src();
                   my ($filepath,$title);
                   if ($src =~ m{^\Q/uploaded/$cdom/$cnum/\E}) {
                       $filepath = &Apache::lonnet::filelocation('',$src);
                       $filepath =~ s/\Q$crsprefix\E//;
                       if ($curRes->is_map()) {
                           $title = $files{$filepath};
                       } else {
                           $filepath =~ s{docs/}{}; 
                           $title = $filepath;
                           $title =~ s{^(default|\d+)/\d*/?}{};
                       }
                   } else {
                       $title = $curRes->title();
                       $title =~ s{/}{_}g;
                       $title = &clean($title);
                       if ($src eq '/res/lib/templates/simpleproblem.problem') {
                           my ($map,$id,$res) = &Apache::lonnet::decode_symb($symb);
                           $map =~ s{^uploaded/$cdom/$cnum/}{};
                           $filepath = $map.'_'.$id;
                           $title .= '.problem';
                       } elsif ($src =~ m{^/adm/$match_domain/$match_username/(\d+)/smppg}) {
                           $filepath = 'smppage_'.$1.'.db';
                           $title .= '.html';
                       }
                   }
                   $display .= '<td>'.$filepath.'</td>'.
                               '<td><input type="text" size="40" name="namefor_'.$count.'" id="namefor_'.$count.'" value="'.$title.'" /></td>'."\n";
             }              }
             $display .= &Apache::loncommon::end_data_table_row();              $display .= &Apache::loncommon::end_data_table_row();
         }          }
Line 332  sub create_picker { Line 441  sub create_picker {
                         '&nbsp;'.&mt('Text').'</label></span></p>';                          '&nbsp;'.&mt('Text').'</label></span></p>';
         }          }
     }      }
     $display .= '<p>';      my $numcount;
     if ($context eq 'imsexport') {      if ($context eq 'imsexport') {
         $display .=           $display .= 
              '<p>'.
            '<input type="hidden" name="finishexport" value="1" />'.             '<input type="hidden" name="finishexport" value="1" />'.
            '<input type="submit" name="exportcourse" value="'.             '<input type="submit" name="exportcourse" value="'.
            &mt('Export').'" />';             &mt('Export').'" /></p>';
           $numcount = $count + $boards + $startcount;
     } elsif ($context eq 'examblock') {      } elsif ($context eq 'examblock') {
         $display .=          $display .=
               '<p>'.
             '<input type="submit" name="resourceblocks" value="'.              '<input type="submit" name="resourceblocks" value="'.
             &mt('Copy Choices to Main Window').'" />';              &mt('Copy Choices to Main Window').'" /></p>';
           $numcount = $count + $startcount;
       } elsif ($context eq 'dumpdocs') {
           $display .= '</fieldset>'.
                       '</div><div style="padding:0;clear:both;margin:0;border:0"></div>'.
                       '<div>'.
                       '<input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype Content").'" />'.
                       '</div>';
           $numcount = $count + $startcount;
     }      }
     $display .= '</p></form>';      $display .= '</form>';
     my $numcount = $count + $boards + $startcount;  
     my $scripttag =       my $scripttag = 
         &respicker_javascript($startcount,$numcount,$context,$formname,\%children,          &respicker_javascript($startcount,$numcount,$context,$formname,\%children,
                               \%hierarchy,\@checked_maps);                                \%hierarchy,\@checked_maps);
       if ($context eq 'dumpdocs') {
           return $scripttag.$display; 
       }
     my ($title,$crumbs,$args);      my ($title,$crumbs,$args);
     if ($context eq 'imsexport') {      if ($context eq 'imsexport') { 
         $title = 'Export '.$crstype.' to IMS Package';          $title = 'Export '.$crstype.' to IMS Package';
     } elsif ($context eq 'examblock') {      } elsif ($context eq 'examblock') {
         $title = 'Resources with Access blocked';          $title = 'Resources with Access blocked';
Line 361  sub create_picker { Line 483  sub create_picker {
     if ($context eq 'imsexport') {      if ($context eq 'imsexport') {
         $output .= &Apache::lonhtmlcommon::breadcrumbs('IMS Export').          $output .= &Apache::lonhtmlcommon::breadcrumbs('IMS Export').
                    &Apache::londocs::startContentScreen('tools');                     &Apache::londocs::startContentScreen('tools');
       } elsif ($context eq 'dumpdocs') {
            $output .= &Apache::lonhtmlcommon::breadcrumbs('Dump to Authoring Space').
                       &Apache::londocs::startContentScreen('tools');
     }      }
     $output .= $display;      $output .= $display;
     if ($context eq 'examblock') {      if ($context eq 'examblock') {
Line 376  sub respicker_javascript { Line 501  sub respicker_javascript {
         $checked_maps) = @_;          $checked_maps) = @_;
     return unless ((ref($children) eq 'HASH') && (ref($hierarchy) eq 'HASH')      return unless ((ref($children) eq 'HASH') && (ref($hierarchy) eq 'HASH')
                    && (ref($checked_maps) eq 'ARRAY'));                     && (ref($checked_maps) eq 'ARRAY'));
       my ($elem,$nested,$nameforelem);
       if ($context eq 'dumpdocs') {
           $elem='((parseInt(item)-'.$startcount.')*2)+'.$startcount;
           $nested='((parseInt(nesting[item][i])-'.$startcount.')*2)+'.$startcount;
           $nameforelem=$elem+1;
       } else {
           $elem='parseInt(item)';
           $nested='parseInt(nesting[item][i])';
       }
     my $scripttag = <<"START";      my $scripttag = <<"START";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 400  function uncheckAll(field) { Line 534  function uncheckAll(field) {
 }  }
   
 function checkFolder(form,item) {  function checkFolder(form,item) {
     if (form.elements[item].checked == true) {      var elem = $elem;
       if (form.elements[elem].checked == true) {
         containerCheck(form,item);          containerCheck(form,item);
     } else {      } else {
         containerUncheck(form,item);          containerUncheck(form,item);
Line 408  function checkFolder(form,item) { Line 543  function checkFolder(form,item) {
 }  }
   
 function checkResource(form,item) {  function checkResource(form,item) {
     if (form.elements[item].checked == false) {      var elem = $elem;
       if (form.elements[elem].checked == false) {
         containerUncheck(form,item);          containerUncheck(form,item);
     }      }
 }  }
Line 452  function recurseFolders() { Line 588  function recurseFolders() {
 }  }
   
 EXTRA  EXTRA
       } elsif ($context eq 'dumpdocs') {
           my $blankmsg = &mt('An item selected has no filename set in the "Save as ..." column.');
           my $dupmsg = &mt('Items selected for copying need unique filenames in the "Save as ..." column.');
           $scripttag .= <<"EXTRA";
   
   function checkUnique(form,field) {
       var duplicate = 0;
       var blank = 0;
       if (field.length > 0) {
           for (i=0; i<field.length; i++) {
               if (field[i].checked) {
                   var item = field[i].value;
                   var namefor = document.getElementById('namefor_'+item);
                   if (namefor) {
                       var possval = namefor.value;
                       if (!possval) {
                           blank = item;
                           break;
                       }
                       for (j=i+1; j<field.length; j++) {
                           if (field[j].checked) {
                               var curritem = field[j].value;
                               var currnamefor = document.getElementById('namefor_'+curritem);
                               if (currnamefor) {
                                   var currval = currnamefor.value;
                                   if (currval == possval) {
                                       duplicate = curritem;
                                       break;
                                   }
                               }
                           }
                       }
                       if (duplicate) {
                           break;
                       }
                   }
               }
           }
       }
       if (blank) {
           alert('$blankmsg');
           return false;
       }
       if (duplicate) {
           alert('$dupmsg');
           return false;
       }
       return true;
   }
   
   EXTRA
   
     }      }
   
     $scripttag .= <<"END";      $scripttag .= <<"END";
   
 function containerCheck(form,item) {  function containerCheck(form,item) {
     form.elements[item].checked = true;      var elem = $elem;
       form.elements[elem].checked = true;
     if(Object.prototype.toString.call(parents[item]) === '[object Array]') {      if(Object.prototype.toString.call(parents[item]) === '[object Array]') {
         if (parents[item].length > 0) {          if (parents[item].length > 0) {
             for (var j=0; j<parents[item].length; j++) {              for (var j=0; j<parents[item].length; j++) {
Line 471  function containerUncheck(form,item) { Line 660  function containerUncheck(form,item) {
     if(Object.prototype.toString.call(nesting[item]) === '[object Array]') {      if(Object.prototype.toString.call(nesting[item]) === '[object Array]') {
         if (nesting[item].length > 0) {          if (nesting[item].length > 0) {
             for (var i=0; i<nesting[item].length; i++) {              for (var i=0; i<nesting[item].length; i++) {
                 form.elements[nesting[item][i]].checked = false;                  var nested = $nested;
             }              }
         }          }
     }      }
Line 540  sub get_navmap_object { Line 729  sub get_navmap_object {
             $outcome = &Apache::loncommon::start_page('Selection of Resources for Blocking',              $outcome = &Apache::loncommon::start_page('Selection of Resources for Blocking',
                                                        undef,{'only_body' => 1,}).                                                         undef,{'only_body' => 1,}).
                       '<h2>'.&mt('Resource Display Failed').'</h2>';                          '<h2>'.&mt('Resource Display Failed').'</h2>';  
         }           } elsif ($context eq 'dumpdocs') {
               $outcome = '<h2>'.&mt('Dump to Authoring Space unavilable');
           }
         $outcome .= '<div class="LC_error">';          $outcome .= '<div class="LC_error">';
         if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
             $outcome .= &mt('Unable to retrieve information about community contents');              $outcome .= &mt('Unable to retrieve information about community contents');
Line 548  sub get_navmap_object { Line 739  sub get_navmap_object {
             $outcome .= &mt('Unable to retrieve information about course contents');              $outcome .= &mt('Unable to retrieve information about course contents');
         }          }
         $outcome .= '</div>';          $outcome .= '</div>';
         if ($context eq 'imsexport') {          if (($context eq 'imsexport') || ($context eq 'dumpdocs')) {
             $outcome .= '<a href="/adm/coursedocs">';              $outcome .= '<a href="/adm/coursedocs">';
             if ($crstype eq 'Community') {              if ($crstype eq 'Community') {
                 $outcome .= &mt('Return to Community Editor');                  $outcome .= &mt('Return to Community Editor');
Line 556  sub get_navmap_object { Line 747  sub get_navmap_object {
                 $outcome .= &mt('Return to Course Editor');                  $outcome .= &mt('Return to Course Editor');
             }              }
             $outcome .= '</a>';              $outcome .= '</a>';
             &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});              if ($context eq 'imsexport') {
                   &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
               } else {
                   &Apache::lonnet::logthis('Dump to Authoring Space failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
               }
         } elsif ($context eq 'examblock') {          } elsif ($context eq 'examblock') {
             $outcome .=  '<href="javascript:window.close();">'.&mt('Close window').'</a>';                       $outcome .=  '<href="javascript:window.close();">'.&mt('Close window').'</a>';         
         }          }
Line 566  sub get_navmap_object { Line 761  sub get_navmap_object {
     }      }
 }  }
   
   sub clean {
       my ($title)=@_;
       $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs;
       return $title;
   }
   
   sub enumerate_course_contents {
       my ($navmap,$map_url,$resource_symb,$titleref,$context,$cdom,$cnum) = @_;
       if ((ref($navmap)) && (ref($map_url) eq 'HASH') &&
           (ref($resource_symb) eq 'HASH') && (ref($titleref) eq 'HASH')) {
           my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
           my $count = 0;
           while (my $curRes = $it->next()) {
               if (ref($curRes)) {
                   my $symb = $curRes->symb();
                   my $ressymb = $symb;
                   if ($context eq 'dumpdocs') {
                       next unless (($curRes->src() =~ m{^\Q/uploaded/$cdom/$cnum/\E(docs|supplemental|simplepage)/}) ||
                                    ($curRes->src() =~ m{^\Q/uploaded/$cdom/$cnum/\E(default|supplemental)_\d+\.(sequence|page)}) ||
                                    ($curRes->src() eq '/res/lib/templates/simpleproblem.problem') ||
                                    ($curRes->src() =~ m{^/adm/$match_domain/$match_username/\d+/smppg}));
                   } elsif ($ressymb =~ m{adm/($match_domain)/($match_username)/(\d+)/bulletinboard$}) {
                       unless ($ressymb =~ m{adm/wrapper/adm}) {
                           $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.
                                      '/bulletinboard';
                       }
                   }
                   $count ++;
                   if (($curRes->is_sequence()) || ($curRes->is_page())) {
                       $map_url->{$count} = (&Apache::lonnet::decode_symb($symb))[2];
                   } else {
                       $resource_symb->{$count} = $ressymb;
                   }
                   $titleref->{$count} = $curRes->title();
               }
           }
       }
       return;
   }
   
 1;  1;

Removed from v.1.6  
changed lines
  Added in v.1.7


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