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

version 1.134, 2006/06/16 22:37:10 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 99  sub recent_filename { Line 98  sub recent_filename {
 }  }
   
 sub store_recent {  sub store_recent {
     my ($area,$name,$value)=@_;      my ($area,$name,$value,$freeze)=@_;
     my $file=&recent_filename($area);      my $file=&recent_filename($area);
     my %recent=&Apache::lonnet::dump($file);      my %recent=&Apache::lonnet::dump($file);
     if (scalar(keys(%recent))>20) {      if (scalar(keys(%recent))>20) {
 # remove oldest value  # remove oldest value
  my $oldest=time;   my $oldest=time();
  my $delkey='';   my $delkey='';
  foreach (keys %recent) {   foreach my $item (keys(%recent)) {
     my $thistime=(split(/\&/,$recent{$_}))[0];      my $thistime=(split(/\&/,$recent{$item}))[0];
     if ($thistime<$oldest) {      if (($thistime ne "always_include") && ($thistime<$oldest)) {
  $oldest=$thistime;   $oldest=$thistime;
  $delkey=$_;   $delkey=$item;
     }      }
  }   }
  &Apache::lonnet::del($file,[$delkey]);   &Apache::lonnet::del($file,[$delkey]);
     }      }
 # store new value  # store new value
       my $timestamp;
       if ($freeze) {
           $timestamp = "always_include";
       } else {
           $timestamp = time();
       }   
     &Apache::lonnet::put($file,{ $name =>       &Apache::lonnet::put($file,{ $name => 
  time.'&'.&escape($value) });   $timestamp.'&'.&escape($value) });
 }  }
   
 sub remove_recent {  sub remove_recent {
Line 132  sub select_recent { Line 137  sub select_recent {
     my $return="\n<select name='$fieldname'".      my $return="\n<select name='$fieldname'".
  ($event?" onchange='$event'":'').   ($event?" onchange='$event'":'').
  ">\n<option value=''>--- ".&mt('Recent')." ---</option>";   ">\n<option value=''>--- ".&mt('Recent')." ---</option>";
     foreach (sort keys %recent) {      foreach my $value (sort(keys(%recent))) {
  unless ($_=~/^error\:/) {   unless ($value =~/^error\:/) {
     my $escaped = &Apache::loncommon::escape_url($_);      my $escaped = &Apache::loncommon::escape_url($value);
     $return.="\n<option value='$escaped'>".      $return.="\n<option value='$escaped'>".
  &unescape((split(/\&/,$recent{$_}))[1]).   &unescape((split(/\&/,$recent{$value}))[1]).
  '</option>';   '</option>';
  }   }
     }      }
Line 149  sub get_recent { Line 154  sub get_recent {
     my %recent=&Apache::lonnet::dump(&recent_filename($area));      my %recent=&Apache::lonnet::dump(&recent_filename($area));
   
 # Create hash with key as time and recent as value  # Create hash with key as time and recent as value
   # Begin filling return_hash with any 'always_include' option
     my %time_hash = ();      my %time_hash = ();
     my $nfrozen = 0;      my %return_hash = ();
     foreach (keys %recent) {      foreach my $item (keys %recent) {
         my ($thistime,$thisvalue)=(split(/\&/,$recent{$_}));          my ($thistime,$thisvalue)=(split(/\&/,$recent{$item}));
         if (($thisvalue eq 'role_frozen') && ($area='roles')) {          if ($thistime eq 'always_include') {
             $thistime=time+$nfrozen;              $return_hash{$item} = &unescape($thisvalue);
             $nfrozen++;              $n--;
           } else {
               $time_hash{$thistime} = $item;
         }          }
         $time_hash{$thistime} = $_;  
     }      }
   
 # Sort by decreasing time and return key value pairs  # Sort by decreasing time and return key value pairs
     my %return_hash = ();  
     my $idx = 1;      my $idx = 1;
     foreach (reverse sort keys %time_hash) {      foreach my $item (reverse(sort(keys(%time_hash)))) {
        $return_hash{$time_hash{$_}} =         $return_hash{$time_hash{$item}} =
                   &unescape((split(/\&/,$recent{$time_hash{$_}}))[1]);                    &unescape((split(/\&/,$recent{$time_hash{$item}}))[1]);
        if ($n && ($idx++ >= $n)) {last;}         if ($n && ($idx++ >= $n)) {last;}
     }      }
   
     return %return_hash;      return %return_hash;
 }  }
   
   sub get_recent_frozen {
       my ($area) = @_;
       my %recent=&Apache::lonnet::dump(&recent_filename($area));
   
   # Create hash with all 'frozen' items
       my %return_hash = ();
       foreach my $item (keys(%recent)) {
           my ($thistime,$thisvalue)=(split(/\&/,$recent{$item}));
           if ($thistime eq 'always_include') {
               $return_hash{$item} = &unescape($thisvalue);
           }
       }
       return %return_hash;
   }
   
   
   
 =pod  =pod
Line 330  sub date_setter { Line 351  sub date_setter {
     }      }
     my $result = "\n<!-- $dname date setting form -->\n";      my $result = "\n<!-- $dname date setting form -->\n";
     $result .= <<ENDJS;      $result .= <<ENDJS;
 <script language="Javascript">  <script type="text/javascript">
     function $dname\_checkday() {      function $dname\_checkday() {
         var day   = document.$formname.$dname\_day.value;          var day   = document.$formname.$dname\_day.value;
         var month = document.$formname.$dname\_month.value;          var month = document.$formname.$dname\_month.value;
Line 393  document.$formname.$dname\_year.value, Line 414  document.$formname.$dname\_year.value,
     }      }
 </script>  </script>
 ENDJS  ENDJS
     $result .= '  <nobr>';      $result .= '  <span style="white-space: nowrap;">';
     my $monthselector = qq{<select name="$dname\_month" $special $state onchange="javascript:$dname\_checkday()" >};      my $monthselector = qq{<select name="$dname\_month" $special $state onchange="javascript:$dname\_checkday()" >};
     # Month      # Month
     my @Months = qw/January February  March     April   May      June       my @Months = qw/January February  March     April   May      June 
Line 445  ENDJS Line 466  ENDJS
         $result .= &mt('[_1] [_2] [_3] ',          $result .= &mt('[_1] [_2] [_3] ',
                        $monthselector,$dayselector,$yearselector);                         $monthselector,$dayselector,$yearselector);
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_4]Select Date[_5]',$cal_link,'</a>');              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         }          }
     } else {      } else {
         $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',          $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',
                       $monthselector,$dayselector,$yearselector,                        $monthselector,$dayselector,$yearselector,
                       $hourselector,$minuteselector,$secondselector);                        $hourselector,$minuteselector,$secondselector);
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_7]Select Date[_8]',$cal_link,'</a>');              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         }          }
     }      }
     $result .= "</nobr>\n<!-- end $dname date setting form -->\n";      $result .= "</span>\n<!-- end $dname date setting form -->\n";
     return $result;      return $result;
 }  }
   
Line 667  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 685  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 983  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 1003  sub crumbs { Line 1026  sub crumbs {
 sub spellheader {  sub spellheader {
     my $start_page=      my $start_page=
  &Apache::loncommon::start_page('Speller Suggestions',undef,   &Apache::loncommon::start_page('Speller Suggestions',undef,
        {'only_body' => 1,         {'only_body'   => 1,
  'js_ready'  => 1,   'js_ready'    => 1,
  'bgcolor'   => '#DDDDDD',});   'bgcolor'     => '#DDDDDD',
           'add_entries' => {
       'onload' => 
                                                  'document.forms.spellcheckform.submit()',
                                                }
           });
     my $end_page=      my $end_page=
  &Apache::loncommon::end_page({'js_ready'  => 1});    &Apache::loncommon::end_page({'js_ready'  => 1}); 
   
Line 1015  sub spellheader { Line 1043  sub spellheader {
 //<!-- BEGIN LON-CAPA Internal  //<!-- BEGIN LON-CAPA Internal
 var checkwin;  var checkwin;
   
 function spellcheckerwindow() {  function spellcheckerwindow(string) {
       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="" /><\\/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 1031  sub spelllink { Line 1060  sub spelllink {
     my ($form,$field)=@_;      my ($form,$field)=@_;
     my $linktext=&mt('Check Spelling');      my $linktext=&mt('Check Spelling');
     return (<<ENDLINK);      return (<<ENDLINK);
 <a href="javascript:if (typeof(document.$form.onsubmit)!='undefined') { if (document.$form.onsubmit!=null) { document.$form.onsubmit();}};spellcheckerwindow();checkwin.document.forms.spellcheckform.text.value=this.document.forms.$form.$field.value;checkwin.document.forms.spellcheckform.submit();">$linktext</a>  <a href="javascript:if (typeof(document.$form.onsubmit)!='undefined') { if (document.$form.onsubmit!=null) { document.$form.onsubmit();}};spellcheckerwindow(this.document.forms.$form.$field.value);">$linktext</a>
 ENDLINK  ENDLINK
 }  }
   
Line 1066  _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 1156  A link to help for the component will be Line 1186  A link to help for the component will be
   
 All inputs can be undef without problems.  All inputs can be undef without problems.
   
 Inputs: $color (the background color of the table returned),  Inputs: $component (the large text on the right side of the table),
         $component (the large text on the right side of the table),  
         $component_help          $component_help
         $function (role to get colors from)  
         $domain   (domian of role)  
         $menulink (boolean, controls whether to include a link to /adm/menu)          $menulink (boolean, controls whether to include a link to /adm/menu)
           $helplink (if 'nohelp' don't include the orange help link)
           $css_class (optional name for the class to apply to the table for CSS)
 Returns a string containing breadcrumbs for the current page.  Returns a string containing breadcrumbs for the current page.
   
 =item clear_breadcrumbs  =item clear_breadcrumbs
Line 1175  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 1187  returns: nothing Line 1216  returns: nothing
     my @Crumbs;      my @Crumbs;
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink) = @_;          my ($component,$component_help,$menulink,$helplink,$css_class) = @_;
         #          #
         my $Str = "\n".'<table id="LC_breadcrumbs"><tr><td>';   $css_class ||= 'LC_breadcrumbs';
           my $Str = "\n".'<table class="'.$css_class.'"><tr><td>';
         #          #
         # Make the faq and bug data cascade          # Make the faq and bug data cascade
         my $faq = '';          my $faq = '';
Line 1224  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'}));
Line 1243  returns: nothing Line 1282  returns: nothing
 #        if ($bug ne '') {  #        if ($bug ne '') {
 #            $icons .= &Apache::loncommon::help_open_bug($bug);  #            $icons .= &Apache::loncommon::help_open_bug($bug);
 #        }  #        }
  if ($helplink ne 'nohelp') {   if ($faq ne '' || $component_help ne '' || $bug ne '') {
     $icons .= &Apache::loncommon::help_open_menu(undef,$component,      $icons .= &Apache::loncommon::help_open_menu($component,
  $component_help,   $component_help,
  undef,$faq,$bug);   $faq,$bug);
  }   }
         if ($icons ne '') {  
             $Str .= $icons.'&nbsp;';  
         }  
         #          #
         $Str .= $links.'</td>';          $Str .= $links.'</td>';
         #          #
         if (defined($component)) {          if (defined($component)) {
             $Str .= '<td class="LC_breadcrumb_component">'.              $Str .= '<td class="'.$css_class.'_component">'.
                 &mt($component).'</td>';                  &mt($component);
       if ($icons ne '') {
    $Str .= '&nbsp;'.$icons;
       }
       $Str .= '</td>';
         }          }
         $Str .= '</tr></table>'."\n";          $Str .= '</tr></table>'."\n";
         #          #
Line 1334  returns: nothing Line 1374  returns: nothing
 # needs that are not accommodated by the *_select_row() routines.      # needs that are not accommodated by the *_select_row() routines.    
   
 sub start_pick_box {  sub start_pick_box {
     my ($table_width) = @_;      my ($css_class) = @_;
       if (defined($css_class)) {
    $css_class = 'class="'.$css_class.'"';
       } else {
    $css_class= 'class="LC_pick_box"';
       }
     my $output = <<"END";      my $output = <<"END";
  <table width="$table_width" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">   <table $css_class>
   <tr>  
       <td>  
        <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff">  
         <tr>  
          <td>  
           <table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff">  
 END  END
     return $output;      return $output;
 }  }
Line 1350  END Line 1389  END
 sub end_pick_box {  sub end_pick_box {
     my $output = <<"END";      my $output = <<"END";
        </table>         </table>
       </td>  
      </tr>  
     </table>  
    </td>  
   </tr>  
  </table>  
 END  END
     return $output;      return $output;
 }  }
   
 sub row_title {  sub row_title {
     my ($col_width,$tablecolor,$title) = @_;      my ($title,$css_title_class,$css_value_class) = @_;
       $css_title_class ||= 'LC_pick_box_title';
       $css_title_class = 'class="'.$css_title_class.'"';
   
       $css_value_class ||= 'LC_pick_box_value';
       $css_value_class = 'class="'.$css_value_class.'"';
   
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
            <tr>             <tr class="LC_pick_box_row">
             <td width="$col_width" bgcolor="$tablecolor">              <td $css_title_class>
              <table width="$col_width" border="0" cellpadding="8" cellspacing="0">         $title:
               <tr>  
                <td align="right"><b>$title:</b>  
                </td>  
               </tr>  
              </table>  
             </td>              </td>
             <td width="100%" valign="top">              <td $css_value_class>
              <table width="100%" border="0" cellpadding="8" cellspacing="0">  
               <tr>  
 ENDONE  ENDONE
     return $output;      return $output;
 }  }
   
 sub row_closure {  sub row_closure {
       my ($no_separator) =@_;
     my $output = <<"ENDTWO";      my $output = <<"ENDTWO";
               </tr>  
              </table>  
             </td>              </td>
            </tr>             </tr>
   ENDTWO
       if (!$no_separator) {
           $output .= <<"ENDTWO";
            <tr>             <tr>
             <td width="100%" colspan="2" bgcolor="#000000">              <td colspan="2" class="LC_pick_box_separator">
              <img src="/adm/lonMisc/blackdot.gif" /><br />  
             </td>              </td>
            </tr>             </tr>
 ENDTWO  ENDTWO
       }
     return $output;      return $output;
 }  }
   
 sub role_select_row {  sub role_select_row {
     my ($roles,$col_width,$tablecolor,$title) = @_;      my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
     my $output;      my $output;
     if (defined($title)) {      if (defined($title)) {
         $output = &row_title($col_width,$tablecolor,$title);          $output = &row_title($title,$css_class);
     }      }
     $output .= qq|               <td valign="top">      $output .= qq|
                                   <select name="roles" multiple >\n|;                                    <select name="roles" multiple >\n|;
     foreach my $role (@$roles) {      foreach my $role (@$roles) {
         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>      $output .= qq|                </select>\n|;
                                  </td>\n|;  
     if (defined($title)) {      if (defined($title)) {
         $output .= &row_closure();          $output .= &row_closure();
     }      }
Line 1420  sub role_select_row { Line 1468  sub role_select_row {
 }  }
   
 sub course_select_row {  sub course_select_row {
     my ($col_width,$tablecolor,$title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;      my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,
     my $output = &row_title($col_width,$tablecolor,$title);   $css_class) = @_;
     $output .= "          <td>\n";      my $output = &row_title($title,$css_class);
     $output .= qq|      $output .= qq|
 <script type="text/javascript" language="Javascript" >  <script type="text/javascript">
     function coursePick (formname) {      function coursePick (formname) {
         for  (var i=0; i<formname.coursepick.length; i++) {          for  (var i=0; i<formname.coursepick.length; i++) {
             if (formname.coursepick[i].value == 'category') {              if (formname.coursepick[i].value == 'category') {
Line 1496  sub course_select_row { Line 1544  sub course_select_row {
             $output .= '</tr></table><br />';              $output .= '</tr></table><br />';
         }          }
     }      }
     $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."','','1'".')" />'.&mt('Pick specific course(s):').' '.$courseform.'&nbsp;&nbsp;<input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br /></td>'."\n";      $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."','','1'".')" />'.&mt('Pick specific course(s):').' '.$courseform.'&nbsp;&nbsp;<input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n";
     $output .= &row_closure();      $output .= &row_closure();
     return $output;      return $output;
 }  }
   
 sub status_select_row {  sub status_select_row {
     my ($types,$col_width,$tablecolor,$title) = @_;      my ($types,$title,$css_class) = @_;
     my $output;       my $output; 
     if (defined($title)) {      if (defined($title)) {
         $output = &row_title($col_width,$tablecolor,$title);          $output = &row_title($title,$css_class,'LC_pick_box_select');
     }      }
     $output .= qq|              <td valign="top">      $output .= qq|
                                     <select name="types" multiple>\n|;                                      <select name="types" multiple>\n|;
     foreach my $status_type (sort(keys(%{$types}))) {      foreach my $status_type (sort(keys(%{$types}))) {
         $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';          $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';
     }      }
     $output .= qq|                   </select>      $output .= qq|                   </select>\n|; 
                                     </td>\n|;   
     if (defined($title)) {      if (defined($title)) {
         $output .= &row_closure();          $output .= &row_closure();
     }      }
Line 1521  sub status_select_row { Line 1568  sub status_select_row {
 }  }
   
 sub email_default_row {  sub email_default_row {
     my ($authtypes,$col_width,$tablecolor,$title,$descrip) = @_;      my ($authtypes,$title,$descrip,$css_class) = @_;
     my $output = &row_title($col_width,$tablecolor,$title);      my $output = &row_title($title,$css_class);
     my @rowcols = ('#eeeeee','#dddddd');      my @rowcols = ('#eeeeee','#dddddd');
     $output .= '              <td>'.$descrip;      $output .= $descrip.
     $output .= &start_pick_box('');    &Apache::loncommon::start_data_table().
     $output .= '                <tr bgcolor="'.$tablecolor.'">   &Apache::loncommon::start_data_table_header_row().
                                  <td><b>'.&mt('Authentication Method').'</b></td><td align="right"><b>'.&mt('Username -> e-mail conversion').'</b></td>   '<th>'.&mt('Authentication Method').'</th>'.
                                 </tr>'."\n";   '<th align="right">'.&mt('Username -> e-mail conversion').'</th>'."\n".
    &Apache::loncommon::end_data_table_header_row();
     my $rownum = 0;      my $rownum = 0;
     foreach my $auth (sort(keys(%{$authtypes}))) {      foreach my $auth (sort(keys(%{$authtypes}))) {
         my ($userentry,$size);          my ($userentry,$size);
         my $rowiter = $rownum%2;  
         if ($auth =~ /^krb/) {          if ($auth =~ /^krb/) {
             $userentry = '';              $userentry = '';
             $size = 25;              $size = 25;
Line 1540  sub email_default_row { Line 1587  sub email_default_row {
             $userentry = 'username@';              $userentry = 'username@';
             $size = 15;              $size = 15;
         }          }
         $output .= '<tr bgcolor="'.$rowcols[$rowiter].'"><td>  '.$$authtypes{$auth}.'</td><td align="right">'.$userentry.'<input type="text" name="'.$auth.'" size="'.$size.'" /></td></tr>';          $output .= &Apache::loncommon::start_data_table_row().
         $rownum ++;      '<td>  '.$$authtypes{$auth}.'</td>'.
       '<td align="right">'.$userentry.
       '<input type="text" name="'.$auth.'" size="'.$size.'" /></td>'.
       &Apache::loncommon::end_data_table_row();
     }      }
     $output .= &end_pick_box();      $output .= &Apache::loncommon::end_data_table();
     $output .= "                   <br /></td>\n";   
     $output .= &row_closure();      $output .= &row_closure();
     return $output;      return $output;
 }  }
   
   
 sub submit_row {  sub submit_row {
     my ($col_width,$tablecolor,$title,$cmd,$submit_text) = @_;      my ($title,$cmd,$submit_text,$css_class) = @_;
     my $output = &row_title($col_width,$tablecolor,$title);      my $output = &row_title($title,$css_class,'LC_pick_box_submit');
     $output .= qq|      $output .= qq|
             <td width="100%" valign="top" align="right">  
              <br />               <br />
              <input type="hidden" name="command" value="$cmd" />               <input type="hidden" name="command" value="$cmd" />
              <input type="submit" value="$submit_text"/> &nbsp;               <input type="submit" value="$submit_text"/> &nbsp;
              <br /><br />               <br /><br />
             </td>\n|;              \n|;
     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 1701  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 1775  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.134  
changed lines
  Added in v.1.158


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