--- loncom/interface/lonhtmlcommon.pm 2005/08/05 18:14:40 1.111 +++ loncom/interface/lonhtmlcommon.pm 2005/10/27 23:13:49 1.116 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.111 2005/08/05 18:14:40 www Exp $ +# $Id: lonhtmlcommon.pm,v 1.116 2005/10/27 23:13:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1217,6 +1217,283 @@ returns: nothing ############################################################ ############################################################ +# Nested table routines. +# +# Routines to display form items in a multi-row table with 2 columns. +# Uses nested tables to divide form elements into segments. +# For examples of use see loncom/interface/lonnotify.pm +# +# Can be used in following order: ... +# &start_pick_box() +# row1 +# row2 +# row3 ... etc. +# &submit_row(0 +# &end_pickbox() +# +# where row1, row 2 etc. are chosen from &role_select_row,&course_select_row, +# &status_select_row and &email_default_row +# +# Can also be used in following order: +# +# &start_pick_box() +# &row_title() +# &row_closure() +# &row_title() +# &row_closure() ... etc. +# &submit_row() +# &end_pick_box() +# +# In general a &submit_row() call should proceed the call to &end_pick_box(), +# as this routine adds a button for form submission. +# &submit_row() does not require a &row_closure after it. +# +# &start_pick_box() creates a bounding table with 1-pixel wide black border. +# rows should be placed between calls to &start_pick_box() and &end_pick_box. +# +# &row_title() adds a title in the left column for each segment. +# &row_closure() closes a row with a 1-pixel wide black line. +# +# &role_select_row() provides a select box from which to choose 1 or more roles +# &course_select_row provides ways of picking groups of courses +# radio buttons: all, by category or by picking from a course picker pop-up +# note: by category option is only displayed if a domain has implemented +# selection by year, semester, department, number etc. +# +# &status_select_row() provides a select box from which to choose 1 or more +# access types (current access, prior access, and future access) +# +# &email_default_row() provides text boxes for default e-mail suffixes for +# different authentication types in a domain. +# +# &row_title() and &row_closure() are called internally by the &*_select_row +# routines, but can also be called directly to start and end rows which have +# needs that are not accommodated by the *_select_row() routines. + +sub start_pick_box { + my ($table_width) = @_; + my $output = <<"END"; + <table width="$table_width" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000"> + <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 + return $output; +} + +sub end_pick_box { + my $output = <<"END"; + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> +END + return $output; +} + +sub row_title { + my ($col_width,$tablecolor,$title) = @_; + my $output = <<"ENDONE"; + <tr> + <td width="$col_width" bgcolor="$tablecolor"> + <table width="$col_width" border="0" cellpadding="8" cellspacing="0"> + <tr> + <td align="right"><b>$title:</b> + </td> + </tr> + </table> + </td> + <td width="100%" valign="top"> + <table width="100%" border="0" cellpadding="8" cellspacing="0"> + <tr> +ENDONE + return $output; +} + +sub row_closure { + my $output = <<"ENDTWO"; + </tr> + </table> + </td> + </tr> + <tr> + <td width="100%" colspan="2" bgcolor="#000000"> + <img src="/adm/lonMisc/blackdot.gif" /><br /> + </td> + </tr> +ENDTWO + return $output; +} + +sub role_select_row { + my ($roles,$col_width,$tablecolor,$title) = @_; + my $output; + if (defined($title)) { + $output = &row_title($col_width,$tablecolor,$title); + } + $output .= qq| <td> + <select name="roles" multiple >\n|; + foreach my $role (@$roles) { + my $plrole; + if ($role eq 'ow') { + $plrole = &mt('Course Owner'); + } else { + $plrole=&Apache::lonnet::plaintext($role); + } + $output .= ' <option value="'.$role.'">'.$plrole.'</option>'; + } + $output .= qq| </select> + </td>\n|; + if (defined($title)) { + $output .= &row_closure(); + } + return $output; +} + +sub course_select_row { + my ($col_width,$tablecolor,$title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_; + my $output = &row_title($col_width,$tablecolor,$title); + $output .= " <td>\n"; + $output .= qq| +<script type="text/javascript" language="Javascript" > + function coursePick (formname) { + for (var i=0; i<formname.coursepick.length; i++) { + if (formname.coursepick[i].value == 'category') { + courseSet(''); + } + if (!formname.coursepick[i].checked) { + if (formname.coursepick[i].value == 'specific') { + formname.coursetotal.value = 0; + formname.courselist = ''; + } + } + } + } + function setPick (formname) { + for (var i=0; i<formname.coursepick.length; i++) { + if (formname.coursepick[i].value == 'category') { + formname.coursepick[i].checked = true; + } + formname.coursetotal.value = 0; + formname.courselist = ''; + } + } +</script> + |; + my $courseform='<b>'.&Apache::loncommon::selectcourse_link + ($formname,'pickcourse','pickdomain','coursedesc').'</b>'; + if ($totcodes > 0) { + $output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.&mt('All courses'); + my $numtitles = @$codetitles; + if ($numtitles > 0) { + $output .= '<br /><input type="radio" name="coursepick" value="category" onclick="coursePick(this.form);alert('."'".&mt('Choose categories, from left to right')."'".')" />'.&mt('Pick courses by category:').' <br />'; + $output .= '<table><tr><td>'.$$codetitles[0].'<br />'."\n". + '<select name="'.$$codetitles[0]. + '" onChange="setPick(this.form);courseSet('."'$$codetitles[0]'".')">'."\n". + ' <option value="-1" />Select'."\n"; + my @items = (); + my @longitems = (); + if ($$idlist{$$codetitles[0]} =~ /","/) { + @items = split(/","/,$$idlist{$$codetitles[0]}); + } else { + $items[0] = $$idlist{$$codetitles[0]}; + } + if (defined($$idlist_titles{$$codetitles[0]})) { + if ($$idlist_titles{$$codetitles[0]} =~ /","/) { + @longitems = split(/","/,$$idlist_titles{$$codetitles[0]}); + } else { + $longitems[0] = $$idlist_titles{$$codetitles[0]}; + } + for (my $i=0; $i<@longitems; $i++) { + if ($longitems[$i] eq '') { + $longitems[$i] = $items[$i]; + } + } + } else { + @longitems = @items; + } + for (my $i=0; $i<@items; $i++) { + $output .= ' <option value="'.$items[$i].'">'.$longitems[$i].'</option>'; + } + $output .= '</select></td>'; + for (my $i=1; $i<$numtitles; $i++) { + $output .= '<td>'.$$codetitles[$i].'<br />'."\n". + '<select name="'.$$codetitles[$i]. + '" onChange="courseSet('."'$$codetitles[$i]'".')">'."\n". + '<option value="-1"><-Pick '.$$codetitles[$i-1].'</option>'."\n". + '</select>'."\n". + '</td>'; + } + $output .= '</tr></table><br />'; + } + } + $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".'rolefilter'."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."',''".')" />'.&mt('Pick specific course(s):').' '.$courseform.' <input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br /></td>'."\n"; + $output .= &row_closure(); + return $output; +} + +sub status_select_row { + my ($types,$col_width,$tablecolor,$title) = @_; + my $output = &row_title($col_width,$tablecolor,$title); + $output .= qq| <td> + <select name="types" multiple>\n|; + foreach my $status_type (sort(keys(%{$types}))) { + $output .= ' <option value="'.$status_type.'">'.$$types{$status_type}.'</option>'; + } + $output .= qq| </select> + </td>\n|; + $output .= &row_closure(); + return $output; +} + +sub email_default_row { + my ($authtypes,$col_width,$tablecolor,$title,$descrip) = @_; + my $output = &row_title($col_width,$tablecolor,$title); + my @rowcols = ('#eeeeee','#dddddd'); + $output .= ' <td>'.$descrip; + $output .= &start_pick_box(''); + $output .= ' <tr bgcolor="'.$tablecolor.'"> + <td><b>'.&mt('Authentication Method').'</b></td><td align="right"><b>'.&mt('Username -> e-mail conversion').'</b></td> + </tr>'."\n"; + my $rownum = 0; + foreach my $auth (sort(keys(%{$authtypes}))) { + my ($userentry,$size); + my $rowiter = $rownum%2; + if ($auth =~ /^krb/) { + $userentry = ''; + $size = 25; + } else { + $userentry = 'username@'; + $size = 15; + } + $output .= '<tr bgcolor="'.$rowcols[$rowiter].'"><td> '.$$authtypes{$auth}.'</td><td align="right">'.$userentry.'<input type="text" name="'.$auth.'" size="'.$size.'" /></td></tr>'; + $rownum ++; + } + $output .= &end_pick_box(); + $output .= " <br /></td>\n"; + $output .= &row_closure(); + return $output; +} + + +sub submit_row { + my ($col_width,$tablecolor,$title,$cmd,$submit_text) = @_; + my $output = &row_title($col_width,$tablecolor,$title); + $output .= qq| + <td width="100%" valign="top" align="right"> + <br /> + <input type="hidden" name="command" value="$cmd" /> + <input type="submit" value="$submit_text"/> + <br /><br /> + </td>\n|; + return $output; +} 1;