Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.147 and 1.178

version 1.147, 2006/07/29 00:31:58 version 1.178, 2008/08/21 10:48:37
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;
   
   
   ##############################################
   ##############################################
   
   =pod
   
   =item dragmath_button
   
   Creates a button that launches a dragmath popup-window, in which an 
   expression can be edited and pasted as LaTeX into a specified textarea. 
   
     textarea - Name of the textarea to edit.
     helpicon - If true, show a help icon to the right of the button.
   
   =cut
   
   sub dragmath_button {
       my ($textarea,$helpicon) = @_;
       my $help_text; 
       if ($helpicon) {
           $help_text = &Apache::loncommon::help_open_topic('Authoring_Math_Editor');
       }
       my $buttontext=&mt('Edit Math');
       return <<ENDDRAGMATH;
                   <input type="button" value="$buttontext", onclick="javascript:mathedit('$textarea',document)" />$help_text
   ENDDRAGMATH
   }
   
   ##############################################
   
   =pod
   
   =item dragmath_js
   
   Javascript used to open pop-up window containing dragmath applet which 
   can be used to paste LaTeX into a textarea.
    
   =cut
   
   sub dragmath_js {
       return <<ENDDRAGMATHJS;
                   <script type="text/javascript">
                     function mathedit(textarea, doc) {
                        targetEntry = textarea;
                        targetDoc   = doc;
                        newwin  = window.open("/adm/dragmath/applet/EditMathPopup.html","","width=565,height=500,resizable");
                     }
                   </script>
   
   ENDDRAGMATHJS
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 78  use LONCAPA; Line 129  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 141  sub select_recent { Line 192  sub select_recent {
     foreach my $value (sort(keys(%recent))) {      foreach my $value (sort(keys(%recent))) {
  unless ($value =~/^error\:/) {   unless ($value =~/^error\:/) {
     my $escaped = &Apache::loncommon::escape_url($value);      my $escaped = &Apache::loncommon::escape_url($value);
       &Apache::loncommon::inhibit_menu_check(\$escaped);
     $return.="\n<option value='$escaped'>".      $return.="\n<option value='$escaped'>".
  &unescape((split(/\&/,$recent{$value}))[1]).   &unescape((split(/\&/,$recent{$value}))[1]).
  '</option>';   '</option>';
Line 311  The method used to restrict user input w Line 363  The method used to restrict user input w
 sub date_setter {  sub date_setter {
     my ($formname,$dname,$currentvalue,$special,$includeempty,$state,      my ($formname,$dname,$currentvalue,$special,$includeempty,$state,
         $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;          $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;
       my $now = time;
     my $wasdefined=1;      my $wasdefined=1;
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
         $state = '';          $state = '';
Line 319  sub date_setter { Line 372  sub date_setter {
         $no_hh_mm_ss = 0;          $no_hh_mm_ss = 0;
     }      }
     if ($currentvalue eq 'now') {      if ($currentvalue eq 'now') {
  $currentvalue=time;   $currentvalue = $now;
     }      }
     if ((!defined($currentvalue)) || ($currentvalue eq '')) {      if ((!defined($currentvalue)) || ($currentvalue eq '')) {
  $wasdefined=0;   $wasdefined=0;
  if ($includeempty) {   if ($includeempty) {
     $currentvalue = 0;      $currentvalue = 0;
  } else {   } else {
     $currentvalue = time;      $currentvalue = $now;
  }   }
     }      }
     # other potentially useful values:     wkday,yrday,is_daylight_savings      # other potentially useful values:     wkday,yrday,is_daylight_savings
       my $tzname;
     my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');      my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');
     if ($currentvalue) {      if ($currentvalue) {
  ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) =           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue); 
     localtime($currentvalue);  
  $year += 1900;  
     }      }
     unless ($wasdefined) {      unless ($wasdefined) {
           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);
  if (($defhour) || ($defmin) || ($defsec)) {   if (($defhour) || ($defmin) || ($defsec)) {
     ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) =   
  localtime(time);  
     $year += 1900;  
     $sec=($defsec?$defsec:0);      $sec=($defsec?$defsec:0);
     $min=($defmin?$defmin:0);      $min=($defmin?$defmin:0);
     $hour=($defhour?$defhour:0);      $hour=($defhour?$defhour:0);
Line 463  ENDJS Line 513  ENDJS
         $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};          $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};
     }      }
     #      #
       my $tzone = ' '.$tzname.' ';
     if ($no_hh_mm_ss) {      if ($no_hh_mm_ss) {
         $result .= &mt('[_1] [_2] [_3] ',          $result .= &mt('[_1] [_2] [_3] ',
                        $monthselector,$dayselector,$yearselector);                         $monthselector,$dayselector,$yearselector).
                      $tzone;
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_1]Select Date[_2]',$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).
                      $tzone;
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         }          }
Line 481  ENDJS Line 534  ENDJS
     return $result;      return $result;
 }  }
   
   sub get_timedates {
       my ($epoch) = @_;
       my $dt = DateTime->from_epoch(epoch => $epoch)
                        ->set_time_zone(&Apache::lonlocal::gettimezone());
       my $tzname = $dt->time_zone_short_name();
       my $sec = $dt->second;
       my $min = $dt->minute;
       my $hour = $dt->hour;
       my $mday = $dt->day;
       my $month = $dt->month;
       if ($month) {
           $month --;
       }
       my $year = $dt->year;
       return ($tzname,$sec,$min,$hour,$mday,$month,$year);
   }
   
   sub build_url {
       my ($base, $fields)=@_;
       my $url;
       $url = $base.'?';
       foreach my $key (keys(%$fields)) {
           $url.=&escape($key).'='.&escape($$fields{$key}).'&amp;';
       }
       $url =~ s/&amp;$//;
       return $url;
   }
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 549  sub get_date_from_form { Line 631  sub get_date_from_form {
     if (defined($env{'form.'.$dname.'_month'})) {      if (defined($env{'form.'.$dname.'_month'})) {
         my $tmpmonth = $env{'form.'.$dname.'_month'};          my $tmpmonth = $env{'form.'.$dname.'_month'};
         if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) {          if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) {
             $month = $tmpmonth - 1;              $month = $tmpmonth;
         }          }
     }      }
     if (defined($env{'form.'.$dname.'_year'})) {      if (defined($env{'form.'.$dname.'_year'})) {
         my $tmpyear = $env{'form.'.$dname.'_year'};          my $tmpyear = $env{'form.'.$dname.'_year'};
         if (($tmpyear =~ /^\d+$/) && ($tmpyear > 1900)) {          if (($tmpyear =~ /^\d+$/) && ($tmpyear >= 1970)) {
             $year = $tmpyear - 1900;              $year = $tmpyear;
         }          }
     }      }
     if (($year<70) || ($year>137)) { return undef; }      if (($year<1970) || ($year>2037)) { return undef; }
     if (defined($sec) && defined($min)   && defined($hour) &&      if (defined($sec) && defined($min)   && defined($hour) &&
         defined($day) && defined($month) && defined($year) &&          defined($day) && defined($month) && defined($year)) {
         eval('&timelocal($sec,$min,$hour,$day,$month,$year)')) {          my $timezone = &Apache::lonlocal::gettimezone();
         return &timelocal($sec,$min,$hour,$day,$month,$year);          my $dt = DateTime->new( year   => $year,
                                   month  => $month,
                                   day    => $day,
                                   hour   => $hour,
                                   minute => $min,
                                   second => $sec,
                                   time_zone => $timezone,
                                 );
           my $epoch_time  = $dt->epoch;
           if ($epoch_time ne '') {
               return $epoch_time;
           } else {
               return undef;
           }
     } else {      } else {
         return undef;          return undef;
     }      }
Line 632  sub javascript_nothing { Line 727  sub javascript_nothing {
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub javascript_docopen {  sub javascript_docopen {
       my ($mimetype) = @_;
       $mimetype ||= 'text/html';
     # safari does not understand document.open() and loads "text/html"      # safari does not understand document.open() and loads "text/html"
     my $nothing = "''";      my $nothing = "''";
     my $user_browser;      my $user_browser;
Line 645  sub javascript_docopen { Line 742  sub javascript_docopen {
     if ($user_browser eq 'safari' && $user_os =~ 'mac') {      if ($user_browser eq 'safari' && $user_os =~ 'mac') {
         $nothing = "document.clear()";          $nothing = "document.clear()";
     } else {      } else {
  $nothing = "document.open('text/html','replace')";   $nothing = "document.open('$mimetype','replace')";
     }      }
     return $nothing;      return $nothing;
 }  }
Line 682  Returns: a perl string as described. Line 779  Returns: a perl string as described.
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub StatusOptions {  sub StatusOptions {
     my ($status, $formName,$size,$onchange)=@_;      my ($status, $formName,$size,$onchange,$mult)=@_;
     $size = 1 if (!defined($size));      $size = 1 if (!defined($size));
     if (! defined($status)) {      if (! defined($status)) {
         $status = 'Active';          $status = 'Active';
         $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($mult)){
           $Str .= ' multiple="multiple" ';
       }
     if(defined($formName) && $formName ne '' && ! defined($onchange)) {      if(defined($formName) && $formName ne '' && ! defined($onchange)) {
         $Str .= ' onchange="document.'.$formName.'.submit()"';          $Str .= ' onchange="document.'.$formName.'.submit()"';
     }      }
Line 707  sub StatusOptions { Line 799  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 854  sub Create_PrgWin { Line 952  sub Create_PrgWin {
          function openpopwin () {           function openpopwin () {
          popwin=open(\'\',\'popwin\',\'width=400,height=100\');".           popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
         "popwin.document.writeln(\'".$start_page.          "popwin.document.writeln(\'".$start_page.
               "<h4>$heading<\/h4>".                "<h4>".&mt("$heading")."<\/h4>".
               "<form name=\"popremain\" method=\"post\">".                "<form action= \"\" name=\"popremain\" method=\"post\">".
               '<input type="text" size="'.$width.'" name="remaining" value="'.                '<input type="text" size="'.$width.'" name="remaining" value="'.
       &mt('Starting').'" /><\\/form>'.$end_page.        &mt('Starting').'" /><\\/form>'.$end_page.
               "\');".                "\');".
Line 867  sub Create_PrgWin { Line 965  sub Create_PrgWin {
  $prog_state{'window'}='window';   $prog_state{'window'}='window';
  if (!$formname) {   if (!$formname) {
     $prog_state{'formname'}=&get_uniq_name();      $prog_state{'formname'}=&get_uniq_name();
     &r_print($r,'<form name="'.$prog_state{'formname'}.'">');      &r_print($r,'<form action="" name="'.$prog_state{'formname'}.'">');
  } else {   } else {
     $prog_state{'formname'}=$formname;      $prog_state{'formname'}=$formname;
  }   }
  if (!$inputname) {   if (!$inputname) {
     $prog_state{'inputname'}=&get_uniq_name();      $prog_state{'inputname'}=&get_uniq_name();
     &r_print($r,$heading.' <input type="text" name="'.$prog_state{'inputname'}.      &r_print($r,&mt("$heading [_1]",' <input type="text" name="'.$prog_state{'inputname'}.'" size="'.$width.'" />'));
      '" size="'.$width.'" />');  
  } else {   } else {
     $prog_state{'inputname'}=$inputname;      $prog_state{'inputname'}=$inputname;
           
Line 894  sub Create_PrgWin { Line 991  sub Create_PrgWin {
 # update progress  # update progress
 sub Update_PrgWin {  sub Update_PrgWin {
     my ($r,$prog_state,$displayString)=@_;      my ($r,$prog_state,$displayString)=@_;
     &r_print($r,'<script>'.$$prog_state{'window'}.'.document.'.      &r_print($r,'<script type="text/javascript">'.$$prog_state{'window'}.'.document.'.
      $$prog_state{'formname'}.'.'.       $$prog_state{'formname'}.'.'.
      $$prog_state{'inputname'}.'.value="'.       $$prog_state{'inputname'}.'.value="'.
      $displayString.'";</script>');       $displayString.'";</script>');
Line 1005  sub crumbs { Line 1102  sub crumbs {
  }    } 
     } else {      } else {
  $path.='/';    $path.='/'; 
       }    
               my $href_path = &HTML::Entities::encode($path,'<>&"');
       &Apache::loncommon::inhibit_menu_check(\$href_path);
       if ($form) {
           my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();';
           $output.=qq{<a href="$href" $target>$dir</a>/};
       } else {
           $output.=qq{<a href="$href_path" $target>$dir</a>/};
     }      }
             my $linkpath = &Apache::loncommon::escape_single($path);  
             if ($form) {  
  $linkpath=  
                     qq{javascript:$form.action='$linkpath';$form.submit();};  
             }  
     $output.=qq{<a href="$linkpath" $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 1147  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 1082  ENDLINK Line 1184  ENDLINK
 }  }
   
 sub htmlareaheaders {  sub htmlareaheaders {
     if (&htmlareablocked()) { return ''; }      return if (&htmlareablocked());
     unless (&htmlareabrowser()) { return ''; }      return if (!&htmlareabrowser());
     my $lang='en';  
     if (&mt('htmlarea_lang') ne 'htmlarea_lang') {  
  $lang=&mt('htmlarea_lang');  
     }  
     return (<<ENDHEADERS);      return (<<ENDHEADERS);
 <script type="text/javascript">  <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
 _editor_url='/htmlarea/';  
 _editor_lang='$lang';  
 </script>  
 <script type="text/javascript" src="/htmlarea/htmlarea.js"></script>  
 <link rel="stylesheet" type="text/css" href="/htmlarea/htmlarea.css" />  
 ENDHEADERS  ENDHEADERS
 }  }
   
 # ------------------------------------------------- Activate additional buttons  
   
 sub htmlareaaddbuttons {  
     if (&htmlareablocked()) { return ''; }  
     unless (&htmlareabrowser()) { return ''; }  
     return (<<ENDADDBUTTON);  
     var config=new HTMLArea.Config();  
     config.registerButton('ed_math','LaTeX Inline',  
   '/htmlarea/images/ed_math.gif',false,  
     function(editor,id) {  
       editor.surroundHTML('&nbsp;<m>\$','\$</m>&nbsp;');  
     }  
   );  
     config.registerButton('ed_math_eqn','LaTeX Equation',  
   '/htmlarea/images/ed_math_eqn.gif',false,  
     function(editor,id) {  
       editor.surroundHTML(  
      '&nbsp;\\n<center><m>\\\\[','\\\\]</m></center>\\n&nbsp;');  
     }  
   );  
     config.toolbar.push(['ed_math','ed_math_eqn']);  
 ENDADDBUTTON  
 }  
   
 # ----------------------------------------------------------------- Preferences  # ----------------------------------------------------------------- Preferences
   
 sub disablelink {  sub disablelink {
Line 1140  sub enablelink { Line 1209  sub enablelink {
     return '<a href="'.&HTML::Entities::encode('/adm/preferences?action=set_wysiwyg&wysiwyg=on&returnurl=','<>&"').&escape($ENV{'REQUEST_URI'}).'">'.&mt('Enable WYSIWYG Editor').'</a>';      return '<a href="'.&HTML::Entities::encode('/adm/preferences?action=set_wysiwyg&wysiwyg=on&returnurl=','<>&"').&escape($ENV{'REQUEST_URI'}).'">'.&mt('Enable WYSIWYG Editor').'</a>';
 }  }
   
   # ------------------------------------------------- lang to use in html editor
   sub htmlarea_lang {
       my $lang='en';
       if (&mt('htmlarea_lang') ne 'htmlarea_lang') {
    $lang=&mt('htmlarea_lang');
       }
       return $lang;
   }
   
 # ----------------------------------------- Script to activate only some fields  # ----------------------------------------- Script to activate only some fields
   
 sub htmlareaselectactive {  sub htmlareaselectactive {
     my @fields=@_;      my @fields=@_;
     unless (&htmlareabrowser()) { return ''; }      unless (&htmlareabrowser()) { return ''; }
     if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }      if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }
     my $output='<script type="text/javascript" defer="1">'.      my $output='<script type="text/javascript" defer="1">';
  &htmlareaaddbuttons();      my $lang = &htmlarea_lang();
     foreach(@fields) {      foreach my $field (@fields) {
  $output.="\nHTMLArea.replace('$_',config);";   $output.="
   {
       var oFCKeditor = new FCKeditor('$field');
       oFCKeditor.Config['CustomConfigurationsPath'] = 
    '/fckeditor/loncapaconfig.js';    
       oFCKeditor.ReplaceTextarea();
       oFCKeditor.Config['AutoDetectLanguage'] = false;
       oFCKeditor.Config['DefaultLanguage'] = '$lang';
   }";
     }      }
     $output.="\nwindow.status='Activated Editfields';\n</script><br />".      $output.="\nwindow.status='Activated Editfields';\n</script><br />".
  &disablelink(@fields);   &disablelink(@fields);
Line 1202  Pushes a breadcrumb on the stack of crum Line 1288  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 1230  returns: nothing Line 1317  returns: nothing
  if (!defined($menulink)) { $menulink=1; }   if (!defined($menulink)) { $menulink=1; }
         if ($menulink) {          if ($menulink) {
             my $description = 'Menu';              my $description = 'Menu';
               my $no_mt_descr = 0;
             if (exists($env{'request.course.id'}) &&               if (exists($env{'request.course.id'}) && 
                 $env{'request.course.id'} ne '') {                  $env{'request.course.id'} ne '') {
                 $description =                   $description = 
                     $env{'course.'.$env{'request.course.id'}.'.description'};                      $env{'course.'.$env{'request.course.id'}.'.description'};
                   $no_mt_descr = 1;
             }              }
             unshift(@Crumbs,{              unshift(@Crumbs,{
                     href   =>'/adm/menu',                      href   =>'/adm/menu',
                     title  =>'Go to main menu',                      title  =>'Go to main menu',
                     target =>'_top',                      target =>'_top',
                     text   =>$description,                      text   =>$description,
                       no_mt  =>$no_mt_descr,
                 });                  });
         }          }
         my $links .=           my $links .= 
Line 1252  returns: nothing Line 1342  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 1320  returns: nothing Line 1419  returns: nothing
 # row1  # row1
 # row2  # row2
 # row3   ... etc.  # row3   ... etc.
 # &submit_row(0  # &submit_row()
 # &end_pickbox()  # &end_pick_box()
 #  #
 # where row1, row 2 etc. are chosen from &role_select_row,&course_select_row,  # where row1, row 2 etc. are chosen from &role_select_row,&course_select_row,
 # &status_select_row and &email_default_row  # &status_select_row and &email_default_row
Line 1390  sub row_title { Line 1489  sub row_title {
     $css_value_class ||= 'LC_pick_box_value';      $css_value_class ||= 'LC_pick_box_value';
     $css_value_class = 'class="'.$css_value_class.'"';      $css_value_class = 'class="'.$css_value_class.'"';
   
       if ($title ne '') {
           $title .= ':';
       }
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
            <tr class="LC_pick_box_row">             <tr class="LC_pick_box_row">
             <td $css_title_class>              <td $css_title_class>
        $title:         $title
             </td>              </td>
             <td $css_value_class>              <td $css_value_class>
 ENDONE  ENDONE
Line 1460  sub course_select_row { Line 1562  sub course_select_row {
     my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,      my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,
  $css_class) = @_;   $css_class) = @_;
     my $output = &row_title($title,$css_class);      my $output = &row_title($title,$css_class);
     $output .= qq|      $output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles);
       $output .= &row_closure();
       return $output;
   }
   
   sub course_selection {
       my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;
       my $output = qq|
 <script type="text/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++) {
Line 1533  sub course_select_row { Line 1642  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 />'."\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();  
     return $output;      return $output;
 }  }
   
Line 1559  sub status_select_row { Line 1667  sub status_select_row {
 sub email_default_row {  sub email_default_row {
     my ($authtypes,$title,$descrip,$css_class) = @_;      my ($authtypes,$title,$descrip,$css_class) = @_;
     my $output = &row_title($title,$css_class);      my $output = &row_title($title,$css_class);
     my @rowcols = ('#eeeeee','#dddddd');  
     $output .= $descrip.      $output .= $descrip.
  &Apache::loncommon::start_data_table().   &Apache::loncommon::start_data_table().
  &Apache::loncommon::start_data_table_header_row().   &Apache::loncommon::start_data_table_header_row().
Line 1784  sub set_form_elements { Line 1891  sub set_form_elements {
                          ($$elements{$name} eq 'checkbox')) {                           ($$elements{$name} eq 'checkbox')) {
                     $output .= qq|                      $output .= qq|
       if (courseForm.elements['$name'].value == "$value") {        if (courseForm.elements['$name'].value == "$value") {
           courseForm.elemenst['$name'].checked = true;            courseForm.elements['$name'].checked = true;
       }|;        }|;
                 }                  }
             }              }
Line 1830  sub set_form_elements { Line 1937  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.147  
changed lines
  Added in v.1.178


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