Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.144 and 1.158

version 1.144, 2006/07/18 21:55:24 version 1.158, 2007/05/07 14:02:45
Line 60  use Time::Local; Line 60  use Time::Local;
 use Time::HiRes;  use Time::HiRes;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use lib '/home/httpd/lib/perl/';  
 use LONCAPA;  use LONCAPA;
   
 ##############################################  ##############################################
Line 78  use LONCAPA; Line 77  use LONCAPA;
 sub authorbombs {  sub authorbombs {
     my $url=shift;      my $url=shift;
     $url=&Apache::lonnet::declutter($url);      $url=&Apache::lonnet::declutter($url);
     my ($udom,$uname)=($url=~/^(\w+)\/(\w+)\//);      my ($udom,$uname)=($url=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)/});
     my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);      my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
     foreach (keys %bombs) {      foreach (keys %bombs) {
  if ($_=~/^$udom\/$uname\//) {   if ($_=~/^$udom\/$uname\//) {
Line 689  sub StatusOptions { Line 688  sub StatusOptions {
         $status = $env{'form.Status'} if (exists($env{'form.Status'}));          $status = $env{'form.Status'} if (exists($env{'form.Status'}));
     }      }
   
     my $OpSel1 = '';  
     my $OpSel2 = '';  
     my $OpSel3 = '';  
   
     if($status eq 'Any')         { $OpSel3 = ' selected'; }  
     elsif($status eq 'Expired' ) { $OpSel2 = ' selected'; }  
     else                         { $OpSel1 = ' selected'; }  
   
     my $Str = '';      my $Str = '';
     $Str .= '<select name="Status"';      $Str .= '<select name="Status"';
     if(defined($formName) && $formName ne '' && ! defined($onchange)) {      if(defined($formName) && $formName ne '' && ! defined($onchange)) {
Line 707  sub StatusOptions { Line 698  sub StatusOptions {
     }      }
     $Str .= ' size="'.$size.'" ';      $Str .= ' size="'.$size.'" ';
     $Str .= '>'."\n";      $Str .= '>'."\n";
     $Str .= '<option value="Active" '.$OpSel1.'>'.      foreach my $type (['Active',  &mt('Currently Has Access')],
         &mt('Currently Enrolled').'</option>'."\n";        ['Future',  &mt('Will Have Future Access')],
     $Str .= '<option value="Expired" '.$OpSel2.'>'.        ['Expired', &mt('Previously Had Access')],
         &mt('Previously Enrolled').'</option>'."\n";        ['Any',     &mt('Any Access Status')]) {
     $Str .= '<option value="Any" '.$OpSel3.'>'.   my ($name,$label) = @$type;
         &mt('Any Enrollment Status').'</option>'."\n";   $Str .= '<option value="'.$name.'" ';
    if ($status eq $name) {
       $Str .= 'selected="selected" ';
    }
    $Str .= '>'.$label.'</option>'."\n";
       }
   
     $Str .= '</select>'."\n";      $Str .= '</select>'."\n";
 }  }
   
Line 1005  sub crumbs { Line 1002  sub crumbs {
  }    } 
     } else {      } else {
  $path.='/';    $path.='/'; 
     }      }    
             my $linkpath = &Apache::loncommon::escape_single($path);              my $linkpath = &Apache::loncommon::escape_single($path);
             if ($form) {              if ($form) {
  $linkpath=   $linkpath=
                     qq{javascript:$form.action='$linkpath';$form.submit();};                      qq{javascript:$form.action='$linkpath';$form.submit();};
             }              }
     $output.=qq{<a href="$linkpath" $target>$dir</a>/};              my $href_path = &HTML::Entities::encode($path,'<>&"');
       $output.=qq{<a href="$path" $target>$dir</a>/};
  }   }
     } else {      } else {
  $output.=$uri;   foreach my $dir (split('/',$uri)) {
               if (! $dir) { next; }
       $output.=$dir.'/';
    }
     }      }
     unless ($uri=~/\/$/) { $output=~s/\/$//; }      if ($uri !~ m|/$|) { $output=~s|/$||; }
     return $output.'</font>'.($noformat?'':'</b></tt><br />');      return $output.'</font>'.($noformat?'':'</b></tt><br />');
 }  }
   
Line 1045  var checkwin; Line 1046  var checkwin;
 function spellcheckerwindow(string) {  function spellcheckerwindow(string) {
     var esc_string = string.replace(/\"/g,'&quot;');      var esc_string = string.replace(/\"/g,'&quot;');
     checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');      checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
     checkwin.document.writeln('$start_page<form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="'+esc_string+'" /><\/form>$end_page');      checkwin.document.writeln('$start_page<form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="'+esc_string+'" /><\\/form>$end_page');
     checkwin.document.close();      checkwin.document.close();
 }  }
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
Line 1094  _editor_url='/htmlarea/'; Line 1095  _editor_url='/htmlarea/';
 _editor_lang='$lang';  _editor_lang='$lang';
 </script>  </script>
 <script type="text/javascript" src="/htmlarea/htmlarea.js"></script>  <script type="text/javascript" src="/htmlarea/htmlarea.js"></script>
   <link rel="stylesheet" type="text/css" href="/htmlarea/htmlarea.css" />
 ENDHEADERS  ENDHEADERS
 }  }
   
Line 1201  Pushes a breadcrumb on the stack of crum Line 1203  Pushes a breadcrumb on the stack of crum
   
 input: $breadcrumb, a hash reference.  The keys 'href','title', and 'text'  input: $breadcrumb, a hash reference.  The keys 'href','title', and 'text'
 are required.  If present the keys 'faq' and 'bug' will be used to provide  are required.  If present the keys 'faq' and 'bug' will be used to provide
 links to the FAQ and bug sites.  links to the FAQ and bug sites. If the key 'no_mt' is present the 'title' 
   and 'text' values won't be sent through &mt()
   
 returns: nothing      returns: nothing    
   
Line 1251  returns: nothing Line 1254  returns: nothing
                      if (defined($_->{'target'}) && $_->{'target'} ne '') {                       if (defined($_->{'target'}) && $_->{'target'} ne '') {
                          $result .= 'target="'.$_->{'target'}.'" ';                           $result .= 'target="'.$_->{'target'}.'" ';
                      }                       }
                      $result .='title="'.&mt($_->{'title'}).'">'.       if ($_->{'no_mt'}) {
                          &mt($_->{'text'}).'</a>';   $result .='title="'.$_->{'title'}.'">'.
        $_->{'text'}.'</a>';
        } else {
    $result .='title="'.&mt($_->{'title'}).'">'.
        &mt($_->{'text'}).'</a>';
        }
                      $result;                       $result;
                      } @Crumbs                       } @Crumbs
                  );                   );
         $links .= '-&gt;' if ($links ne '');          $links .= '-&gt;' if ($links ne '');
         $links .= '<b>'.&mt($last->{'text'}).'</b>';   if ($last->{'no_mt'}) {
       $links .= '<b>'.$last->{'text'}.'</b>';
    } else {
       $links .= '<b>'.&mt($last->{'text'}).'</b>';
    }
         #          #
         my $icons = '';          my $icons = '';
         $faq = $last->{'faq'} if (exists($last->{'faq'}));          $faq = $last->{'faq'} if (exists($last->{'faq'}));
         $bug = $last->{'bug'} if (exists($last->{'bug'}));          $bug = $last->{'bug'} if (exists($last->{'bug'}));
         $help = $last->{'help'} if (exists($last->{'help'}));          $help = $last->{'help'} if (exists($last->{'help'}));
         $component_help=($component_help?$component_help:$help);          $component_help=($component_help?$component_help:$help);
         if ($faq ne '') {  #        if ($faq ne '') {
             $icons .= &Apache::loncommon::help_open_faq($faq);  #            $icons .= &Apache::loncommon::help_open_faq($faq);
         }  #        }
 #        if ($bug ne '') {  #        if ($bug ne '') {
 #            $icons .= &Apache::loncommon::help_open_bug($bug);  #            $icons .= &Apache::loncommon::help_open_bug($bug);
 #        }  #        }
Line 1417  ENDTWO Line 1429  ENDTWO
 }  }
   
 sub role_select_row {  sub role_select_row {
     my ($roles,$title,$css_class) = @_;      my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
     my $output;      my $output;
     if (defined($title)) {      if (defined($title)) {
         $output = &row_title($title,$css_class);          $output = &row_title($title,$css_class);
Line 1428  sub role_select_row { Line 1440  sub role_select_row {
         my $plrole;          my $plrole;
         if ($role eq 'ow') {          if ($role eq 'ow') {
             $plrole = &mt('Course Owner');              $plrole = &mt('Course Owner');
           } elsif ($role eq 'cr') {
               if ($show_separate_custom) {
                   if ($cdom ne '' && $cnum ne '') {
                       my %course_customroles = &course_custom_roles($cdom,$cnum);
                       foreach my $crrole (sort(keys(%course_customroles))) {
                           my ($plcrrole) = ($crrole =~ m|^cr/[^/]+/[^/]+/(.+)$|);
                           $output .= '  <option value="'.$crrole.'">'.$plcrrole.
                                      '</option>';
                       }
                   }
               } else {
                   $plrole = &mt('Custom Role');
               }
         } else {          } else {
             $plrole=&Apache::lonnet::plaintext($role);              $plrole=&Apache::lonnet::plaintext($role);
         }          }
         $output .= '  <option value="'.$role.'">'.$plrole.'</option>';          if (($role ne 'cr') || (!$show_separate_custom)) {
               $output .= '  <option value="'.$role.'">'.$plrole.'</option>';
           }
     }      }
     $output .= qq|                </select>\n|;      $output .= qq|                </select>\n|;
     if (defined($title)) {      if (defined($title)) {
Line 1584  sub submit_row { Line 1611  sub submit_row {
     return $output;      return $output;
 }  }
   
   sub course_custom_roles {
       my ($cdom,$cnum) = @_;
       my %returnhash=();
       my %coursepersonnel=&Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
       foreach my $person (sort(keys(%coursepersonnel))) {
           my ($role) = ($person =~ /^([^:]+):/);
           my ($end,$start) = split(/:/,$coursepersonnel{$person});
           if ($end == -1 && $start == -1) {
               next;
           }
           if ($role =~ m|^cr/[^/]+/[^/]+/[^/]|) {
               $returnhash{$role} ++;
           }
       }
       return %returnhash;
   }
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                                                                                             
Line 1722  sub set_form_elements { Line 1767  sub set_form_elements {
                 my $valuestring = join('","',@{$values{$name}});                  my $valuestring = join('","',@{$values{$name}});
                 $output .= qq|                  $output .= qq|
   var textvalues = new Array ("$valuestring");    var textvalues = new Array ("$valuestring");
   var total = courseForm.$name.length;    var total = courseForm.elements['$name'].length;
   if (total > $numvalues) {    if (total > $numvalues) {
       total = $numvalues;        total = $numvalues;
   }        }    
   for (var i=0; i<total; i++) {    for (var i=0; i<total; i++) {
       courseForm.$name\[i].value = textvalues[i];        courseForm.elements['$name']\[i].value = textvalues[i];
   }    }
 |;  |;
             } else {              } else {
                 $output .= qq|                  $output .= qq|
   courseForm.$name.value = "$values{$name}[0]";    courseForm.elements['$name'].value = "$values{$name}[0]";
 |;  |;
             }              }
         } else {          } else {
             $output .=  qq|              $output .=  qq|
   var elementLength = courseForm.$name.length;    var elementLength = courseForm.elements['$name'].length;
   if (elementLength==undefined) {    if (elementLength==undefined) {
 |;  |;
             foreach my $value (@{$values{$name}}) {              foreach my $value (@{$values{$name}}) {
                 if ($$elements{$name} eq 'selectbox') {                  if ($$elements{$name} eq 'selectbox') {
                     $output .=  qq|                      $output .=  qq|
       if (courseForm.$name.options[0].value == "$value") {        if (courseForm.elements['$name'].options[0].value == "$value") {
           courseForm.$name.options[0].selected = true;            courseForm.elements['$name'].options[0].selected = true;
       }|;        }|;
                 } elsif (($$elements{$name} eq 'radio') ||                  } elsif (($$elements{$name} eq 'radio') ||
                          ($$elements{$name} eq 'checkbox')) {                           ($$elements{$name} eq 'checkbox')) {
                     $output .= qq|                      $output .= qq|
       if (courseForm.$name.value == "$value") {        if (courseForm.elements['$name'].value == "$value") {
           courseForm.$name.checked = true;            courseForm.elements['$name'].checked = true;
       }|;        }|;
                 }                  }
             }              }
             $output .= qq|              $output .= qq|
   }    }
   else {    else {
       for (var i=0; i<courseForm.$name.length; i++) {        for (var i=0; i<courseForm.elements['$name'].length; i++) {
 |;  |;
             if ($$elements{$name} eq 'selectbox') {              if ($$elements{$name} eq 'selectbox') {
                 $output .=  qq|                  $output .=  qq|
           courseForm.$name.options[i].selected = false;|;            courseForm.elements['$name'].options[i].selected = false;|;
             } elsif (($$elements{$name} eq 'radio') ||               } elsif (($$elements{$name} eq 'radio') || 
                      ($$elements{$name} eq 'checkbox')) {                       ($$elements{$name} eq 'checkbox')) {
                 $output .= qq|                  $output .= qq|
           courseForm.$name\[i].checked = false;|;             courseForm.elements['$name']\[i].checked = false;|; 
             }              }
             $output .= qq|              $output .= qq|
       }        }
       for (var j=0; j<courseForm.$name.length; j++) {        for (var j=0; j<courseForm.elements['$name'].length; j++) {
 |;  |;
             foreach my $value (@{$values{$name}}) {              foreach my $value (@{$values{$name}}) {
                 if ($$elements{$name} eq 'selectbox') {                  if ($$elements{$name} eq 'selectbox') {
                     $output .=  qq|                      $output .=  qq|
           if (courseForm.$name.options[j].value == "$value") {            if (courseForm.elements['$name'].options[j].value == "$value") {
               courseForm.$name.options[j].selected = true;                courseForm.elements['$name'].options[j].selected = true;
           }|;            }|;
                 } elsif (($$elements{$name} eq 'radio') ||                  } elsif (($$elements{$name} eq 'radio') ||
                          ($$elements{$name} eq 'checkbox')) {                            ($$elements{$name} eq 'checkbox')) { 
                       $output .= qq|                        $output .= qq|
           if (courseForm.$name\[j].value == "$value") {            if (courseForm.elements['$name']\[j].value == "$value") {
               courseForm.$name\[j].checked = true;                courseForm.elements['$name']\[j].checked = true;
           }|;            }|;
                 }                  }
             }              }
Line 1796  sub set_form_elements { Line 1841  sub set_form_elements {
     return $output;      return $output;
 }  }
   
   ##############################################
   ##############################################
   
   # javascript_valid_email
   #
   # Generates javascript to validate an e-mail address.
   # Returns a javascript function which accetps a form field as argumnent, and
   # returns false if field.value does not satisfy two regular expression matches
   # for a valid e-mail address.  Backwards compatible with old browsers without
   # support for javascript RegExp (just checks for @ in field.value in this case). 
   
   sub javascript_valid_email {
       my $scripttag .= <<'END';
   function validmail(field) {
       var str = field.value;
       if (window.RegExp) {
           var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
           var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //"
           var reg1 = new RegExp(reg1str);
           var reg2 = new RegExp(reg2str);
           if (!reg1.test(str) && reg2.test(str)) {
               return true;
           }
           return false;
       }
       else
       {
           if(str.indexOf("@") >= 0) {
               return true;
           }
           return false;
       }
   }
   END
       return $scripttag;
   }
   
 1;  1;
   
 __END__  __END__

Removed from v.1.144  
changed lines
  Added in v.1.158


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