[LON-CAPA-cvs] cvs: loncom /interface lonhtmlcommon.pm
raeburn
lon-capa-cvs@mail.lon-capa.org
Tue, 04 Oct 2005 19:59:17 -0000
This is a MIME encoded message
--raeburn1128455957
Content-Type: text/plain
raeburn Tue Oct 4 15:59:17 2005 EDT
Modified files:
/loncom/interface lonhtmlcommon.pm
Log:
Some helper routines for use in constructing web forms. Nested tables are wrapped around a central two-column table containing separate rows for form elements that request related data from user. Used in loncom/interface/lonnotify.pm
--raeburn1128455957
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20051004155917.txt"
Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.111 loncom/interface/lonhtmlcommon.pm:1.112
--- loncom/interface/lonhtmlcommon.pm:1.111 Fri Aug 5 14:14:40 2005
+++ loncom/interface/lonhtmlcommon.pm Tue Oct 4 15:59:15 2005
@@ -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.112 2005/10/04 19:59:15 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1217,6 +1217,264 @@
############################################################
############################################################
+# 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(0 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 = &row_title($col_width,$tablecolor,$title);
+ $output .= qq| <td>
+ <select name="roles" multiple >\n|;
+ foreach (@$roles) {
+ my $plrole=&Apache::lonnet::plaintext($_);
+ $output .= ' <option value="'.$_.'">'.$plrole.'</option>';
+ }
+ $output .= qq| </select>
+ </td>\n|;
+ $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].checked) {
+ if (formname.coursepick[i].value == 'category') {
+ courseSet('');
+ }
+ if (formname.coursepick[i].value == 'specific') {
+ 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="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.'
+ <table>
+ <tr>
+ <td><b>'.&mt('Authentication Method').'</b></td><td> </td><td> </td><td><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 rowcolor="'.$rowcols[$rowiter].'"><td> '.$$authtypes{$auth}.'</td><td> </td><td align="right">'.$userentry.'</td><td><input type="text" name="'.$auth.'" size="'.$size.'" /></td></tr>';
+ $rownum ++;
+ }
+ $output .= " </table>
+ </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;
--raeburn1128455957--