Diff for /loncom/interface/lonmenu.pm between versions 1.379 and 1.389

version 1.379, 2012/05/28 19:00:58 version 1.389, 2012/10/31 12:54:13
Line 247  sub primary_menu { Line 247  sub primary_menu {
             my @primsub;              my @primsub;
             if (ref($primary_submenu{$title}) eq 'ARRAY') {              if (ref($primary_submenu{$title}) eq 'ARRAY') {
                 foreach my $item (@{$primary_submenu{$title}}) {                  foreach my $item (@{$primary_submenu{$title}}) {
                     next if (($item->[2] eq 'wishlist') &&                      next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'}));
                              ((!&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) &&  
                               (!&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/"))));  
                     next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs()));                      next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs()));
                     next if ((($item->[2] eq 'portfolio') ||                      next if ((($item->[2] eq 'portfolio') ||
                              ($item->[2] eq 'blog')) &&                               ($item->[2] eq 'blog')) &&
Line 395  sub secondary_menu { Line 393  sub secondary_menu {
     }      }
     $menu =~ s/\[uname\]/$$author{user}/g;      $menu =~ s/\[uname\]/$$author{user}/g;
     $menu =~ s/\[udom\]/$$author{dom}/g;      $menu =~ s/\[udom\]/$$author{dom}/g;
       if ($menu) {
     return "<ul id=\"LC_secondary_menu\">$menu</ul>";          $menu = "<ul id=\"LC_secondary_menu\">$menu</ul>";
       }
       return $menu;
 }  }
   
 sub create_submenu {  sub create_submenu {
Line 523  sub innerregister { Line 523  sub innerregister {
         ###          ###
         my $editbutton = '';          my $editbutton = '';
         my $noeditbutton = 1;          my $noeditbutton = 1;
         my ($cnum,$cdom);          my ($cnum,$cdom,$cfile,$switchserver,$home,$uploaded);
         if ($env{'request.course.id'}) {          if ($env{'request.course.id'}) {
             $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};              $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
             $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};              $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 555  sub innerregister { Line 555  sub innerregister {
                 my $home = &Apache::lonnet::homeserver($caname,$cadom);                  my $home = &Apache::lonnet::homeserver($caname,$cadom);
  my $allowed=0;   my $allowed=0;
  my @ids=&Apache::lonnet::current_machine_ids();   my @ids=&Apache::lonnet::current_machine_ids();
  foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }   if (($home ne 'no_host') && (grep(/^\Q$home\E$/,@ids))) {
  if (!$allowed) {  
     $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);      $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);
                     $noeditbutton = 0;  
                 }                  }
             }              } else {
 #  #
 # We are an author for some stuff, but currently do not have the role of author.  # We are an author for some stuff, but currently do not have the role of author.
 # Figure out if we have authoring privileges for the resource we are looking at.  # Figure out if we have authoring privileges for the resource we are looking at.
 # This should maybe become a privilege check in lonnet  
 #  #
             ##                  my ($cfile,$switchserver,$home,$uploaded);
             ## Determine if user can edit url.                  if ($env{'request.filename'}) {
             ##                      my $file=&Apache::lonnet::declutter($env{'request.filename'});
             my $cfile='';                      ##
             my $cfuname='';                      ## Determine if user can edit url.
             my $cfudom='';                      ##
             my $uploaded;                      ($cfile,$home,$switchserver,$uploaded) =
             my $switchserver='';                          &Apache::lonnet::can_edit_resource($file,$cnum,$cdom);
             my $home;                  }
             if ($env{'request.filename'}) {                  # Turn the button on or off
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  if (($cfile) && ($home ne '') && ($home ne 'no_host')) {
                 if (defined($cnum) && defined($cdom)) {                      my $nocrsedit;
                     $uploaded = &is_course_upload($file,$cnum,$cdom);                      # Suppress display where CC has switched to student role.
                 }                      if ($env{'request.course.id'}) {
                 if (!$uploaded) {                          unless(&Apache::lonnet::allowed('mdc',
                                                           $env{'request.course.id'})) {
                     $file=~s{^(priv/$match_domain/$match_username)}{/$1};                              $nocrsedit = 1;
                     $file=~s{^($match_domain/$match_username)}{/priv/$1};  
   
                     # Check that the user has permission to edit this resource  
                     my $setpriv = 1;  
                     ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$setpriv);  
                     if (defined($cfudom)) {  
         $home=&Apache::lonnet::homeserver($cfuname,$cfudom);  
         my $allowed=0;  
         my @ids=&Apache::lonnet::current_machine_ids();  
         foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }  
         if ($allowed) {  
                             $cfile=$file;  
                         } else {  
                             $switchserver=$file;  
                         }                          }
                     }                      }
                 }                      if ($nocrsedit) {
             }                          $editbutton=&clear(6,1);
             # Finally, turn the button on or off                      } else {
             if (($cfile || $switchserver) && !$const_space) {                          $editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded);
                 my $nocrsedit;  
                 # Suppress display where CC has switched to student role.  
                 if ($env{'request.course.id'}) {  
                     unless(&Apache::lonnet::allowed('mdc',  
                                                     $env{'request.course.id'})) {  
                         $nocrsedit = 1;  
                     }                      }
                 }                  } elsif ($editbutton eq '') {
                 if ($nocrsedit) {  
                     $editbutton=&clear(6,1);                      $editbutton=&clear(6,1);
                 } else {  
                     my $bot = "go('$cfile')";  
                     if ($switchserver) {  
                         if ( $env{'request.symb'} && $env{'request.course.id'} ) {  
                             $cfile = '/adm/switchserver?otherserver='.$home.'&amp;role='.  
                                      &HTML::Entities::encode($env{'request.role'},'"<>&').'&amp;symb='.  
                                      &HTML::Entities::encode($env{'request.symb'},'"<>&');  
                             $bot = "need_switchserver('$cfile');";  
                         }  
                     }  
                     $editbutton=&switch  
                        ('','',6,1,'pcstr.png','Edit','resource[_2]',  
                         $bot,"Edit this resource");  
                     $noeditbutton = 0;  
                 }                  }
             } elsif ($editbutton eq '') {  
                 $editbutton=&clear(6,1);  
             }              }
         }          } elsif (($env{'request.filename'}) && $env{'request.course.id'}) {
         if (($noeditbutton) && ($env{'request.filename'})) {   
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {              if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  my $file=&Apache::lonnet::declutter($env{'request.filename'});
                 if (defined($cnum) && defined($cdom)) {                  if (($cnum =~ /$match_courseid/) && ($cdom =~ /$match_domain/)) {
                     if (&is_course_upload($file,$cnum,$cdom)) {                      my ($cfile,$home,$switchserver,$uploaded) =
                         my $cfile = &edit_course_upload($file,$cnum,$cdom);                          &Apache::lonnet::can_edit_resource($file,$cnum,$cdom);
                         if ($cfile) {                      if (($uploaded) && ($cfile ne '')) {
                             $editbutton=&switch                          $editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded);
                                         ('','',6,1,'pcstr.png','Edit',  
                                          'resource[_2]',"go('".$cfile."');",  
                                          'Edit this resource');  
                         }  
                     }                      }
                 }                  }
             }              }
Line 663  sub innerregister { Line 618  sub innerregister {
         ###          ###
         ###          ###
 # Prepare the rest of the buttons  # Prepare the rest of the buttons
         my $menuitems;          my ($menuitems,$got_prt,$got_wishlist);
         if ($const_space) {          if ($const_space) {
 #  #
 # We are in construction space  # We are in construction space
Line 699  ENDMENUITEMS Line 654  ENDMENUITEMS
         } elsif ( defined($env{'request.course.id'}) &&           } elsif ( defined($env{'request.course.id'}) && 
  $env{'request.symb'} ne '' ) {   $env{'request.symb'} ne '' ) {
 #  #
 # We are in a course and looking at a registred URL  # We are in a course and looking at a registered URL
 # Should probably be in mydesk.tab  # Should probably be in mydesk.tab
 #  #
     $menuitems=(<<ENDMENUITEMS);      $menuitems=(<<ENDMENUITEMS);
Line 711  c&8&1 Line 666  c&8&1
 c&8&2  c&8&2
 s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
             if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) {              $got_prt = 1;
               if (($env{'user.adv'}) && ($env{'request.uri'} =~ /^\/res/)
                   && (!$env{'request.enc'})) {
                 # wishlist is only available for users with access to resource-pool                  # wishlist is only available for users with access to resource-pool
                 # and links can only be set for resources within the resource-pool                  # and links can only be set for resources within the resource-pool
                 $menuitems .= (<<ENDMENUITEMS);                  $menuitems .= (<<ENDMENUITEMS);
 s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
                   $got_wishlist = 1;
             }              }
   
 my $currentURL = &Apache::loncommon::get_symb();  my $currentURL = &Apache::loncommon::get_symb();
Line 732  $menuitems.="&Notes&&annotate()&"; Line 690  $menuitems.="&Notes&&annotate()&";
 $menuitems.="Make notes and annotations about this resource&&1\n";  $menuitems.="Make notes and annotations about this resource&&1\n";
   
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {
  if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) {   if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata  s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata
 ENDREALRES  ENDREALRES
                 }                  }
         $menuitems.=(<<ENDREALRES);                  unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) {
                       $menuitems.=(<<ENDREALRES);
 s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource  s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource
   ENDREALRES
                   }
                   $menuitems.=(<<ENDREALRES);
 s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource  s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource
 ENDREALRES  ENDREALRES
     }      }
         }          }
  if ($env{'request.uri'} =~ /^\/res/) {   if ($env{'request.uri'} =~ /^\/res/) {
     $menuitems .= (<<ENDMENUITEMS);              unless ($got_prt) {
           $menuitems .= (<<ENDMENUITEMS);
 s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
             if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') {                  $got_prt = 1;
                 # wishlist is only available for users with access to resource-pool              }
                 $menuitems .= (<<ENDMENUITEMS);              unless ($got_wishlist) {
                   if (($env{'user.adv'}) && (!$env{'request.enc'})) {
                       # wishlist is only available for users with access to resource-pool
                       $menuitems .= (<<ENDMENUITEMS);
 s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
             }                      $got_wishlist = 1;
  }                  }
       }
           }
         my $buttons='';          my $buttons='';
         foreach (split(/\n/,$menuitems)) {          foreach (split(/\n/,$menuitems)) {
     my ($command,@rest)=split(/\&/,$_);      my ($command,@rest)=split(/\&/,$_);
Line 816  ENDMENUITEMS Line 784  ENDMENUITEMS
            . &Apache::lonhtmlcommon::scripttag('', 'end');             . &Apache::lonhtmlcommon::scripttag('', 'end');
 }  }
   
 sub is_course_upload {  sub get_editbutton {
     my ($file,$cnum,$cdom) = @_;      my ($cfile,$home,$switchserver,$uploaded) = @_;
     my $uploadpath = &LONCAPA::propath($cdom,$cnum);      my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,
     $uploadpath =~ s{^\/}{};                                                           $uploaded,$env{'request.symb'});
     if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) ||      if ($jscall) {
         ($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) {          return &switch('','',6,1,'pcstr.png','Edit','resource[_2]',
         return 1;                         $jscall,"Edit this resource");
     }      }
     return;  
 }  
   
 sub edit_course_upload {  
     my ($file,$cnum,$cdom) = @_;  
     my $cfile;  
     if ($file =~/\.(htm|html|css|js|txt)$/) {  
         my $ext = $1;  
         my $url = &Apache::lonnet::hreflocation('',$file);  
         my $home = &Apache::lonnet::homeserver($cnum,$cdom);  
         my @ids=&Apache::lonnet::current_machine_ids();  
         my $dest;  
         if ($home && grep(/^\Q$home\E$/,@ids)) {  
             $dest = $url.'?forceedit=1';  
         } else {  
             unless (&Apache::lonnet::get_locks()) {  
                 $dest = '/adm/switchserver?otherserver='.  
                         $home.'&role='.$env{'request.role'}.  
                         '&url='.$url.'&forceedit=1';  
             }  
         }  
         if ($dest) {  
             $cfile = &HTML::Entities::encode($dest,'"<>&');  
         }  
     }  
     return $cfile;  
 }  }
   
 # ================================================================== Raw Config  # ================================================================== Raw Config
Line 1251  sub utilityfunctions { Line 1193  sub utilityfunctions {
     my $end_page_annotate =       my $end_page_annotate = 
         &Apache::loncommon::end_page({'js_ready' => 1});          &Apache::loncommon::end_page({'js_ready' => 1});
   
     my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.      my $jumptores = &Apache::lonhtmlcommon::javascript_jumpto_resource();
                          &mt('Switch server?');  
   
     my $esc_url=&escape($currenturl);      my $esc_url=&escape($currenturl);
     my $esc_symb=&escape($currentsymb);      my $esc_symb=&escape($currentsymb);
Line 1267  return (<<ENDUTILITY) Line 1208  return (<<ENDUTILITY)
   
 $dc_popup_cid  $dc_popup_cid
   
 function go(url) {  $jumptores
    if (url!='' && url!= null) {  
        currentURL = null;  
        currentSymb= null;  
        window.location.href=url;  
    }  
 }  
   
 function need_switchserver(url) {  
     if (url!='' && url!= null) {  
         if (confirm("$confirm_switch")) {  
             go(url);   
         }  
     }  
     return;  
 }  
   
 function gopost(url,postdata) {  function gopost(url,postdata) {
    if (url!='') {     if (url!='') {
Line 1466  sub roles_selector { Line 1392  sub roles_selector {
     } else {      } else {
         $ccrole = 'cc';          $ccrole = 'cc';
     }      }
     my $priv;      my ($priv,$gotsymb,$destsymb);
     my $destinationurl = $ENV{'REQUEST_URI'};      my $destinationurl = $ENV{'REQUEST_URI'};
       if ($destinationurl =~ /\?symb=/) {
           $gotsymb = 1;
       } elsif ($destinationurl =~ m{^/enc/}) {
           my $plainurl = &Apache::lonenc::unencrypted($destinationurl);
           if ($plainurl =~ /\?symb=/) {
               $gotsymb = 1;
           }
       }
       unless ($gotsymb) {
           $destsymb = &Apache::lonnet::symbread();
           if ($destsymb ne '') {
               $destsymb = &Apache::lonenc::check_encrypt($destsymb);
           }
       }
     my $reqprivs = &required_privs();      my $reqprivs = &required_privs();
     if (ref($reqprivs) eq 'HASH') {      if (ref($reqprivs) eq 'HASH') {
         my $destination = $destinationurl;          my $destination = $destinationurl;
Line 1555  sub roles_selector { Line 1495  sub roles_selector {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>';                   $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>'; 
             }              }
         }          }
         $role_selector .= '</select>'."\n".          $role_selector .= '</select>'."\n";
           if ($destsymb ne '') {
               $role_selector .= '<input type="hidden" name="destsymb" value="'.
                                 &HTML::Entities::encode($destsymb).'" />'."\n";
           }
           $role_selector .=
                '<input type="hidden" name="destinationurl" value="'.                 '<input type="hidden" name="destinationurl" value="'.
                &HTML::Entities::encode($destinationurl).'" />'."\n".                 &HTML::Entities::encode($destinationurl).'" />'."\n".
                '<input type="hidden" name="gotorole" value="1" />'."\n".                 '<input type="hidden" name="gotorole" value="1" />'."\n".
Line 1811  sub required_privs { Line 1756  sub required_privs {
   
 sub countdown_timer {  sub countdown_timer {
     if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') &&      if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') &&
         ($env{'request.filename'}=~/$LONCAPA::assess_re/) &&          ($env{'request.filename'}=~/$LONCAPA::assess_re/)) {
         ($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) {          my ($type,$hastimeleft,$slothastime);
           my $now = time;
           if ($env{'request.filename'} =~ /\.task$/) {
               $type = 'Task';
           } else {
               $type = 'problem';
           }
           my ($status,$accessmsg,$slot_name,$slot) =
               &Apache::lonhomework::check_slot_access('0',$type);
           if ($slot_name ne '') {
               if (ref($slot) eq 'HASH') {
                   if (($slot->{'starttime'} < $now) &&
                       ($slot->{'endtime'} > $now)) {
                       $slothastime = 1;
                   }
               }
           }
           if ($status ne 'CAN_ANSWER') {
               return;
           }
         my $duedate = &Apache::lonnet::EXT("resource.0.duedate");          my $duedate = &Apache::lonnet::EXT("resource.0.duedate");
         if ($duedate && $duedate > time) {          my @interval=&Apache::lonnet::EXT("resource.0.interval");
           my $hastimeleft;
           if (@interval > 1) {
               my $first_access=&Apache::lonnet::get_first_access($interval[1]);
               if ($first_access > 0) {
                   if ($first_access+$interval[0] > time) {
                       $hastimeleft = 1;
                   }
               }
           }
           if (($duedate && $duedate > time) ||
               (!$duedate && $hastimeleft) ||
               ($slot_name ne '' && $slothastime)) {
             my ($collapse,$expand,$alttxt,$title,$currdisp);              my ($collapse,$expand,$alttxt,$title,$currdisp);
             my @interval=&Apache::lonnet::EXT("resource.0.interval");              if ((@interval > 1 && $hastimeleft) ||
             if (@interval > 1) {                  ($type eq 'Task' && $slothastime)) {
                 $currdisp = 'inline';                  $currdisp = 'inline';
                 $collapse = '&#9658;&nbsp;';                  $collapse = '&#9658;&nbsp;';
             } else {              } else {

Removed from v.1.379  
changed lines
  Added in v.1.389


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