[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">&lt;-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.'&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;</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"/> &nbsp;
+             <br /><br />
+            </td>\n|;
+    return $output;
+}
 
 1;
 

--raeburn1128455957--