Diff for /loncom/interface/lonnavmaps.pm between versions 1.440.2.3 and 1.449

version 1.440.2.3, 2010/11/15 22:46:47 version 1.449, 2010/06/24 14:21:39
Line 478  use Apache::loncommon(); Line 478  use Apache::loncommon();
 use Apache::lonenc();  use Apache::lonenc();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   
 use POSIX qw (floor strftime);  use POSIX qw (floor strftime);
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use LONCAPA;  use LONCAPA;
Line 492  sub NOTHING { return 3; } Line 493  sub NOTHING { return 3; }
   
 my $resObj = "Apache::lonnavmaps::resource";  my $resObj = "Apache::lonnavmaps::resource";
   
 # Keep these mappings in sync with lonquickgrades, which uses the colors  # Keep these mappings in sync with lonquickgrades, which usesthe colors
 # instead of the icons.  # instead of the icons.
 my %statusIconMap =   my %statusIconMap = 
     (      (
Line 537  my $hurryUpColor = "#FF0000"; Line 538  my $hurryUpColor = "#FF0000";
 my $future_slots_checked = 0;  my $future_slots_checked = 0;
 my $future_slots = 0;  my $future_slots = 0;
   
 sub close {  
     if ($env{'environment.remotenavmap'} ne 'on') { return ''; }  
     return(<<ENDCLOSE);  
 <script type="text/javascript">  
 window.status='Accessing Nav Control';  
 menu=window.open("/adm/rat/empty.html","loncapanav",  
                  "height=600,width=400,scrollbars=1");  
 window.status='Closing Nav Control';  
 menu.close();  
 window.status='Done.';  
 </script>  
 ENDCLOSE  
 }  
   
 sub update {  
     if ($env{'environment.remotenavmap'} ne 'on') { return ''; }  
     if (!$env{'request.course.id'}) { return ''; }  
     if ($ENV{'REQUEST_URI'}=~m|^/adm/navmaps|) { return ''; }  
     return(<<ENDUPDATE);  
 <form name="navform"></form>  
 <script type="text/javascript">  
 this.document.navform.action='/adm/navmaps#curloc';  
 this.document.navform.target='loncapanav';  
 this.document.navform.submit();  
 </script>  
 ENDUPDATE  
 }  
   
   
 sub addToFilter {  sub addToFilter {
     my $hashIn = shift;      my $hashIn = shift;
     my $addition = shift;      my $addition = shift;
Line 699  sub getDescription { Line 671  sub getDescription {
         return &mt("Excused by instructor");          return &mt("Excused by instructor");
     }      }
     if ($status == $res->ATTEMPTED) {      if ($status == $res->ATTEMPTED) {
         if ($res->src() eq '/res/gci/gci/internal/submission.problem') {          if ($res->is_anonsurvey($part) || $res->is_survey($part)) {
             return &mt('Question(s) submitted for review');              return &mt("Survey submission recorded");
         } else {          } else {
             return &mt("Answer submitted, not yet graded");              return &mt("Answer submitted, not yet graded");
         }          }
Line 723  sub getDescription { Line 695  sub getDescription {
         }          }
     }      }
     if ($status == $res->ANSWER_SUBMITTED) {      if ($status == $res->ANSWER_SUBMITTED) {
         if ($res->src() eq '/res/gci/gci/internal/submission.problem') {          return &mt('Answer submitted');
             return &mt('Question(s) submitted for review');  
         } else {  
             return &mt('Answer submitted');  
         }  
     }      }
 }  }
   
Line 1018  sub render_resource { Line 986  sub render_resource {
         $nonLinkedText .= ' ('.&mt('[_1] parts', $resource->countParts()).')';          $nonLinkedText .= ' ('.&mt('[_1] parts', $resource->countParts()).')';
     }      }
   
     my $target;  
     if ($env{'environment.remotenavmap'} eq 'on') {  
  $target=' target="loncapaclient" ';  
     }  
     if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) {      if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) {
         $result .= "$curMarkerBegin<a $target href=\"$link\">$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>";          $result .= "$curMarkerBegin<a href=\"$link\">$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>";
     } else {      } else {
         $result .= "$curMarkerBegin$linkopen$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>";          $result .= "$curMarkerBegin$linkopen$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>";
     }      }
Line 1036  sub render_communication_status { Line 1000  sub render_communication_status {
     my $discussionHTML = ""; my $feedbackHTML = ""; my $errorHTML = "";      my $discussionHTML = ""; my $feedbackHTML = ""; my $errorHTML = "";
   
     my $link = $params->{"resourceLink"};      my $link = $params->{"resourceLink"};
     my $target;      my $linkopen = "<a href=\"$link\">";
     if ($env{'environment.remotenavmap'} eq 'on') {  
  $target=' target="loncapaclient" ';  
     }  
     my $linkopen = "<a $target href=\"$link\">";  
     my $linkclose = "</a>";      my $linkclose = "</a>";
     my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc");      my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc");
     if ($resource->hasDiscussion()) {      if ($resource->hasDiscussion()) {
         $discussionHTML = $linkopen .          $discussionHTML = $linkopen .
             '<img alt="'.&mt('New Discussion').'" src="'.$location.'/chat.gif" />' .              '<img alt="'.&mt('New Discussion').'" src="'.$location.'/chat.gif" title="'.&mt('New Discussion').'"/>' .
             $linkclose;              $linkclose;
     }      }
           
Line 1053  sub render_communication_status { Line 1013  sub render_communication_status {
         my $feedback = $resource->getFeedback();          my $feedback = $resource->getFeedback();
         foreach my $msgid (split(/\,/, $feedback)) {          foreach my $msgid (split(/\,/, $feedback)) {
             if ($msgid) {              if ($msgid) {
                 $feedbackHTML .= '&nbsp;<a '.$target.' href="/adm/email?display='                  $feedbackHTML .= '&nbsp;<a href="/adm/email?display='
                     . &escape($msgid) . '">'                      . &escape($msgid) . '">'
                     . '<img alt="'.&mt('New E-mail').'" src="'.$location.'/feedback.gif" /></a>';                      . '<img alt="'.&mt('New E-mail').'" src="'.$location.'/feedback.gif" title="'.&mt('New E-mail').'"/></a>';
             }              }
         }          }
     }      }
Line 1067  sub render_communication_status { Line 1027  sub render_communication_status {
             last if ($errorcount>=10); # Only output 10 bombs maximum              last if ($errorcount>=10); # Only output 10 bombs maximum
             if ($msgid) {              if ($msgid) {
                 $errorcount++;                  $errorcount++;
                 $errorHTML .= '&nbsp;<a '.$target.' href="/adm/email?display='                  $errorHTML .= '&nbsp;<a href="/adm/email?display='
                     . &escape($msgid) . '">'                      . &escape($msgid) . '">'
                     . '<img alt="'.&mt('New Error').'" src="'.$location.'/bomb.gif" /></a>';                      . '<img alt="'.&mt('New Error').'" src="'.$location.'/bomb.gif" title="'.&mt('New Error').'"/></a>';
             }              }
         }          }
     }      }
Line 1087  sub render_quick_status { Line 1047  sub render_quick_status {
         $params->{'multipart'} && $part eq "0";          $params->{'multipart'} && $part eq "0";
   
     my $link = $params->{"resourceLink"};      my $link = $params->{"resourceLink"};
     my $target;      my $linkopen = "<a href=\"$link\">";
     if ($env{'environment.remotenavmap'} eq 'on') {  
  $target=' target="loncapaclient" ';  
     }  
     my $linkopen = "<a $target href=\"$link\">";  
     my $linkclose = "</a>";      my $linkclose = "</a>";
   
  $result .= '<td class="LC_middle">';   $result .= '<td class="LC_middle">';
Line 1444  sub render { Line 1400  sub render {
     if ($printCloseAll && !$args->{'resource_no_folder_link'}) {      if ($printCloseAll && !$args->{'resource_no_folder_link'}) {
  my ($link,$text);   my ($link,$text);
         if ($condition) {          if ($condition) {
     $link='"navmaps?condition=0&amp;filter=&amp;'.$queryString.      $link='navmaps?condition=0&amp;filter=&amp;'.$queryString.
  '&here='.&escape($here).'"';   '&amp;here='.&escape($here);
     $text='Close all folders';      $text='Close all folders';
         } else {          } else {
     $link='"navmaps?condition=1&amp;filter=&amp;'.$queryString.      $link='navmaps?condition=1&amp;filter=&amp;'.$queryString.
  '&here='.&escape($here).'"';   '&amp;here='.&escape($here);
     $text='Open all folders';      $text='Open all folders';
         }          }
           if ($env{'form.register'}) {
               $link .= '&amp;register='.$env{'form.register'};
           }
  if ($args->{'caller'} eq 'navmapsdisplay') {   if ($args->{'caller'} eq 'navmapsdisplay') {
     &add_linkitem($args->{'linkitems'},'changefolder',      &add_linkitem($args->{'linkitems'},'changefolder',
   'location.href='.$link,$text);    "location.href='$link'",$text);
  } else {   } else {
     $result.='<a href='.$link.'>'.&mt($text).'</a>';      $result.= '<a href="'.$link.'">'.&mt($text).'</a>';
  }   }
         $result .= "\n";          $result .= "\n";
     }      }
Line 1472  sub render { Line 1431  sub render {
  <input type="hidden" name="navurl" value="$ENV{'QUERY_STRING'}" />   <input type="hidden" name="navurl" value="$ENV{'QUERY_STRING'}" />
  <input type="hidden" name="navtime" value="$time" />   <input type="hidden" name="navtime" value="$time" />
 END  END
           if ($env{'form.register'}) {
               $result .= '<input type="hidden" name="register" value="'.$env{'form.register'}.'" />';
           }
         if ($args->{'sort'} eq 'discussion') {           if ($args->{'sort'} eq 'discussion') { 
     my $totdisc = 0;      my $totdisc = 0;
     my $haveDisc = '';      my $haveDisc = '';
Line 1493  END Line 1455  END
  $result.='</form>';   $result.='</form>';
     }      }
   
      
     if ($args->{'caller'} eq 'navmapsdisplay') {      if ($args->{'caller'} eq 'navmapsdisplay') {
         $result .= '<table><tr><td>'.          $result .= '<table><tr><td>'.
                    &Apache::loncommon::help_open_menu('Navigation Screen','Navigation_Screen',undef,'RAT').'</td><td>&nbsp;</td>';                     &Apache::loncommon::help_open_menu('Navigation Screen','Navigation_Screen',undef,'RAT').'</td>';
  $result.="<td class=\"LC_middle\">".mt('Tools:')."</td>";      $result .= '<td>&nbsp;</td>'; 
    $result.='<td class="LC_middle">'.&mt('Tools:').'</td>';
  $result.=&show_linkitems_toolbar($args->{'linkitems'});   $result.=&show_linkitems_toolbar($args->{'linkitems'});
         if ($args->{'sort_html'}) {          if ($args->{'sort_html'}) {
     if ($env{'environment.remotenavmap'} ne 'on') {              $result.='<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>'.
  $result.='<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>'.                  '<td align="right">'.$args->{'sort_html'}.'</td></tr>';
     '<td align="right">'.$args->{'sort_html'}.'</td></tr>';          }
     } else {  
  $result.='</tr><tr><td align="left" colspan="4"><br />'.  
     $args->{'sort_html'}.'</td></tr>';  
     }  
  }  
         $result .= '</table>';          $result .= '</table>';
     } elsif ($args->{'sort_html'}) {       } elsif ($args->{'sort_html'}) { 
         $result.=$args->{'sort_html'};           $result.=$args->{'sort_html'}; 
Line 1758  END Line 1715  END
     if (defined($anchor)) { $anchor='#'.$anchor; }      if (defined($anchor)) { $anchor='#'.$anchor; }
     my $srcHasQuestion = $src =~ /\?/;      my $srcHasQuestion = $src =~ /\?/;
     $args->{"resourceLink"} = $src.      $args->{"resourceLink"} = $src.
  ($srcHasQuestion?'&':'?') .   ($srcHasQuestion?'&amp;':'?') .
  'symb=' . &escape($symb).$anchor;   'symb=' . &escape($symb).$anchor;
  }   }
         # Now, we've decided what parts to show. Loop through them and          # Now, we've decided what parts to show. Loop through them and
Line 1820  END Line 1777  END
     # it's quite likely this might fix other browsers, too, and       # it's quite likely this might fix other browsers, too, and 
     # certainly won't hurt anything.      # certainly won't hurt anything.
     if ($displayedJumpMarker) {      if ($displayedJumpMarker) {
         $result .= "          $result .= &Apache::lonhtmlcommon::scripttag("
 <script>  
 if (location.href.indexOf('#curloc')==-1) {  if (location.href.indexOf('#curloc')==-1) {
     setTimeout(\"location += '#curloc';\", 0)      setTimeout(\"location += '#curloc';\", 0)
 }  }
 </script>";  ");
     }      }
   
     $result.=&Apache::loncommon::end_data_table();      $result.=&Apache::loncommon::end_data_table();
Line 1845  sub add_linkitem { Line 1801  sub add_linkitem {
     $$linkitems{$name}{'text'}=&mt($text);      $$linkitems{$name}{'text'}=&mt($text);
 }  }
   
 sub show_linkitems {  
     my ($linkitems)=@_;  
     my @linkorder = ("blank","launchnav","closenav","firsthomework",  
      "everything","uncompleted","changefolder","clearbubbles");  
       
     my $result .= (<<ENDBLOCK);  
               <td align="left">  
 <script type="text/javascript">  
     function changeNavDisplay () {  
  var navchoice = document.linkitems.toplink[document.linkitems.toplink.selectedIndex].value;  
 ENDBLOCK  
     foreach my $link (@linkorder) {  
  $result.= "if (navchoice == '$link') {".  
     $linkitems->{$link}{'cmd'}."}\n";  
     }  
     $result.='}  
               </script>  
                    <form name="linkitems" method="post">  
                        <span class="LC_nobreak"><select name="toplink">'."\n";  
     foreach my $link (@linkorder) {  
  if (defined($linkitems->{$link})) {  
     if ($linkitems->{$link}{'text'} ne '') {  
  $result .= ' <option value="'.$link.'">'.  
     $linkitems->{$link}{'text'}."</option>\n";  
     }  
  }  
     }  
     $result .= '</select>&nbsp;<input type="button" name="chgnav"  
                    value="Go" onClick="javascript:changeNavDisplay()" />  
                 </span></form></td>'."\n";  
   
     return $result;  
 }  
   
 sub show_linkitems_toolbar {  sub show_linkitems_toolbar {
     my ($linkitems,$condition)=@_;      my ($linkitems,$condition)=@_;
     my @linkorder = ("blank","launchnav","closenav","firsthomework",      my @linkorder = ('firsthomework','everything','uncompleted',
      "everything","uncompleted","changefolder","clearbubbles");                       'changefolder','clearbubbles');
           my $result .='<td align="left">'."\n". 
     my $result .='                    '<span class="LC_nobreak">'."\n".
               <td align="left">                   '<ul id="LC_toolbar">';
                        <span class="LC_nobreak">'."\n<ul id=\"LC_toolbar\">";  
     foreach my $link (@linkorder) {      foreach my $link (@linkorder) {
         my $link_id = "LC_content_toolbar_".$link;          my $link_id = 'LC_content_toolbar_'.$link;
  if (defined($linkitems->{$link})) {          if (defined($linkitems->{$link})) {
     if ($linkitems->{$link}{'text'} ne '') {              if ($linkitems->{$link}{'text'} ne '') {
  $linkitems->{$link}{'cmd'}=~s/"/'/g;                  $linkitems->{$link}{'cmd'}=~s/"/'/g;
  if($linkitems->{$link}{'cmd'}){                  if ($linkitems->{$link}{'cmd'}) {
                    if($link eq 'changefolder'){                      if ($link eq 'changefolder') {
                       if($condition){$link_id='LC_content_toolbar_changefolder_toggled'}                          if ($condition) {
                       else{$link_id='LC_content_toolbar_changefolder'}                              $link_id='LC_content_toolbar_changefolder_toggled';
                    }                          } else {
                           $result .=  ' <li><a href="#"'.                              $link_id='LC_content_toolbar_changefolder';
      ' onClick="'.$linkitems->{$link}{'cmd'}.'"'.                          }
                                 ' id="'.$link_id.'"'.                      }
                                 ' class="LC_toolbarItem"'.                      $result .= '<li><a href="#" '.
    ' title="'.$linkitems->{$link}{'text'}.'"></a></li>'."\n";                                 'onclick="'.$linkitems->{$link}{'cmd'}.'" '.
  }                                 'id="'.$link_id.'" '.
                                  'class="LC_toolbarItem" '.
     }                                 'title="'.$linkitems->{$link}{'text'}.'">'.
  }                                 '</a></li>'."\n";
     }                  }
     if ($env{'environment.remotenavmap'} eq 'on') {  
         if (&Apache::loncommon::needs_gci_custom()) {  
             if ($env{'request.course.id'} &&  
                 &Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                 $result .= '<li><a target="loncapaclient" href="/adm/menu" id="LC_content_toolbar_management" class="LC_toolbarItem" title="'.&mt('Test Management').'" /></a></li>';  
             }              }
         }          }
     }      }
     $result .= '</ul>';      $result .= '</ul>'.
     $result .= ' </span></td>'."\n";                 '</span></td>'."\n";
   
     return $result;      return $result;
 }  }
   
Line 2658  in the filter function. Line 2573  in the filter function.
 Retrieves version infomation for a url. Returns the version (a number, or   Retrieves version infomation for a url. Returns the version (a number, or 
 the string "mostrecent") for resources which have version information in    the string "mostrecent") for resources which have version information in  
 the big hash.  the big hash.
       
 =cut  =cut
   
   
Line 3543  sub navHash { Line 3458  sub navHash {
     my $self = shift;      my $self = shift;
     my $param = shift;      my $param = shift;
     my $id = shift;      my $id = shift;
     return $self->{NAV_MAP}->navhash($param . ($id?$self->{ID}:""));      my $arg = $param . ($id?$self->{ID}:"");
       if (defined($arg)) {
           return $self->{NAV_MAP}->navhash($arg);
       }
       return;
 }  }
   
 =pod  =pod
Line 3786  sub is_problem { Line 3705  sub is_problem {
     }      }
     return 0;      return 0;
 }  }
   #
   #  The has below is the set of status that are considered 'incomplete'
   #
   my %incomplete_hash = 
   (
    TRIES_LEFT()     => 1,
    OPEN()           => 1,
    ATTEMPTED()      => 1
   
    );
   #
   #  Return tru if a problem is incomplete... for now incomplete means that
   #  any part of the problem is incomplete. 
   #  Note that if the resources is not a problem, 0 is returned.
   #
   sub is_incomplete {
       my $self = shift;
       if ($self->is_problem()) {
    &Apache::lonnet::logthis('is problem');
    foreach my $part (@{$self->parts()}) {
       &Apache::lonnet::logthis("$part status ".$self->status($part));
       if (exists($incomplete_hash{$self->status($part)})) {
    return 1;
       }
    }
       }
       return 0;
          
   }
 sub is_raw_problem {  sub is_raw_problem {
     my $self=shift;      my $self=shift;
     my $src = $self->src();      my $src = $self->src();
Line 3821  sub is_survey { Line 3769  sub is_survey {
     my $self = shift();      my $self = shift();
     my $part = shift();      my $part = shift();
     my $type = $self->parmval('type',$part);      my $type = $self->parmval('type',$part);
     if ($type eq 'survey') {      if (($type eq 'survey') || ($type eq 'surveycred')) {
         return 1;          return 1;
     }      }
     if ($self->src() =~ /\.(survey)$/) {      if ($self->src() =~ /\.(survey)$/) {
         return 1;          return 1;
     }      }
     return 0;      return 0;
   }
   sub is_anonsurvey {
       my $self = shift();
       my $part = shift();
       my $type = $self->parmval('type',$part);
       if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) {
           return 1;
       }
       return 0;
 }  }
 sub is_task {  sub is_task {
     my $self=shift;      my $self=shift;

Removed from v.1.440.2.3  
changed lines
  Added in v.1.449


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