[LON-CAPA-cvs] cvs: loncom /interface coursecatalog.pm

raeburn raeburn@source.lon-capa.org
Sat, 07 Feb 2009 18:15:44 -0000


raeburn		Sat Feb  7 18:15:44 2009 EDT

  Modified files:              
    /loncom/interface	coursecatalog.pm 
  Log:
  Streamline the interface for category selection.
  - If there is only one category at the top level, automatically pick it (both instcode and custom category cases).   
  - Text "Main Categories" eliminated in all but one case.
  - Button text: "Change" replaced with "Pick main category", Pick subcategory, or  "Show subcategories" as appropriate.
  - "Select" option in select box eliminated when there is only one available option.
  - "Javascript function: "check_selected" displays alert if "Pick subcategory" button was pushed but not subcategory had been selected.      
  
  
Index: loncom/interface/coursecatalog.pm
diff -u loncom/interface/coursecatalog.pm:1.45 loncom/interface/coursecatalog.pm:1.46
--- loncom/interface/coursecatalog.pm:1.45	Sat Feb  7 18:06:19 2009
+++ loncom/interface/coursecatalog.pm	Sat Feb  7 18:15:44 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler for displaying the course catalog interface
 #
-# $Id: coursecatalog.pm,v 1.45 2009/02/07 18:06:19 raeburn Exp $
+# $Id: coursecatalog.pm,v 1.46 2009/02/07 18:15:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -90,7 +90,7 @@
     if ($env{'form.coursenum'} ne '' && &user_is_known()) {
         &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems);
     } else {
-        my ($catlinks,$has_subcats) = &category_breadcrumbs($codedom,@cats);
+        my ($catlinks,$has_subcats,$selitem) = &category_breadcrumbs($codedom,@cats);
         my $catjs = <<"ENDSCRIPT";
 
 function setCatDepth(depth) {
@@ -123,6 +123,16 @@
             }
         } else {
             my (%add_entries);
+            if ($selitem) {
+                $catjs .= <<ENDJS;
+function check_selected() {
+    if (document.coursecats.$selitem.options[document.coursecats.$selitem.selectedIndex].value == "") {
+        alert('Choose a subcategory to display');
+        return false;
+    }
+}
+ENDJS
+            }
             $catjs = '<script type="text/javascript">'."\n".$catjs."\n".'</script>';
             &cat_header($r,$codedom,$catjs,\%add_entries,$catlinks);
             if ($env{'form.currcat_0'} ne '') {
@@ -392,7 +402,8 @@
               '<table border="0"><tr><td><b>'.&mt('Domain:').'</b></td><td>'.
               &Apache::loncommon::select_dom_form($codedom,'showdom','',1).
 	      '&nbsp;<input type="submit" name="godom" value="'.&mt('Change').'" /></td></tr></table></form>'.
-	      '<form name="coursecats" method="post" action="/adm/coursecatalog">'.
+	      '<form name="coursecats" method="post" action="/adm/coursecatalog"'.
+              ' onsubmit="check_selected()">'.
               '<table border="0"><tr>'.$catlinks.'</tr></table></form>');
     return;
 }
@@ -404,34 +415,48 @@
     my $currcat_str = '<input type="hidden" name="catalog_maxdepth" value="'.$deeper.'" /><input type="hidden" name="showdom" value="'.$dom.'" />';
     my $catlinks = '<td valign="top"><b>'.&mt('Catalog:').'</b></td><td><table><tr>';
     my $has_subcats;
+    my $selitem;
     for (my $i=0; $i<$deeper; $i++) {
         $currcat_str .= '<input type="hidden" name="currcat_'.$i.'" value="'.$env{'form.currcat_'.$i}.'" />';
         my ($cattitle,$shallower);
         if ($i == 0) {
-            $cattitle = &mt('Main Categories');
+            if (ref($cats[0]) eq 'ARRAY') {
+                if (@{$cats[0]} > 1) {
+                    $cattitle = &mt('Main Categories');
+                }
+            }
         } else {
             $shallower = $i-1;
             my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$env{'form.currcat_'.$shallower});
             $cattitle = $cat;
         }
-        $catlinks .= '<td valign="top"><a href="javascript:setCatDepth('."'$shallower'".')">'.$cattitle.'</a>'.$crumbsymbol.'</td>';
+        if ($cattitle ne '') {
+            $catlinks .= '<td valign="top"><a href="javascript:setCatDepth('."'$shallower'".')">'.$cattitle.'</a>'.$crumbsymbol.'</td>';
+        }
     }
     if ($deeper == 0) {
-        $catlinks .= '<td>'.&mt('Main Categories').':&nbsp;';
+        $catlinks .= '<td>';
         if (ref($cats[0]) eq 'ARRAY') {
-            if ((@{$cats[0]} == 1) && ($cats[0][0] eq 'instcode')) {
-                $catlinks .= &mt('Official courses (with institutional codes)').
-                             '<input type="hidden" name="currcat_0" value="instcode::0" />';
-                $env{'form.currcat_0'} = 'instcode::0';
+            if ((@{$cats[0]} == 1) && (@cats == 1)) {
+                if ($cats[0][0] eq 'instcode') {
+                    $catlinks .= &mt('Official courses (with institutional codes)').
+                                 '<input type="hidden" name="currcat_0" value="instcode::0" />';
+                    $env{'form.currcat_0'} = 'instcode::0';
+                } else {
+                    my $name = $cats[0][0];
+                    my $item = &escape($name).'::0';
+                    $catlinks .= $name.
+                             '<input type="hidden" name="currcat_0" value="'.$item.'" />';
+                    $env{'form.currcat_0'} = $item;
+                }
             } else {
                 $has_subcats = 1;
-                $catlinks .= '<select name="currcat_0">'."\n";
+                my $buttontext = &mt('Show subcategories');
+                $selitem = 'currcat_0';
+                $catlinks .= '<select name="'.$selitem.'">'."\n";
                 if (@{$cats[0]} > 1) {
-                    my $selstr;
-                    if ($env{'form.currcat_0'} eq '') {
-                        $selstr = ' selected="selected" ';
-                    }
-                    $catlinks .= '<option value=""  selected="selected">'.&mt('Select').'</option>'."\n";
+                    $catlinks .= '<option value="" selected="selected">'.&mt('Select').'</option>'."\n";
+                    $buttontext = &mt('Pick main category');
                 }
                 for (my $i=0; $i<@{$cats[0]}; $i++) {
                     my $name = $cats[0][$i];
@@ -445,7 +470,8 @@
                     $catlinks .= '</option>'."\n";
                 }
                 $catlinks .= '</select>'."\n".
-                             '&nbsp;<input type="submit" name="gocats" value="'.&mt('Change').'" />';
+                             '&nbsp;<input type="submit" name="gocats" value="'.
+                             $buttontext.'" />';
             }
         } else {
             $catlinks .= &mt('Official courses (with institutional codes)').
@@ -465,24 +491,31 @@
         if ($cat eq 'instcode') {
             $currcat = &mt('Official courses (with institutional codes)');
         }
-        $catlinks .= '<td>'.$currcat;
+        $catlinks .= '<td><b>'.$currcat.'</b>';
         if (ref($cats[$deeper]{$cat}) eq 'ARRAY') {
             $has_subcats = 1;
-            my $selstr;
-            $catlinks .= ':&nbsp;<select name="currcat_'.$deeper.'">'.
-                         '<option value="" selected="selected">'.
-                         &mt('Select').'</option>';
+            my $buttontext = &mt('Show subcategories');
+            $selitem = 'currcat_'.$deeper;
+            $catlinks .= ':&nbsp;<select name="'.$selitem.'">';
+            if (@{$cats[$deeper]{$cat}} > 1) {
+                $catlinks .= '<option value="" selected="selected">'.
+                             &mt('Select').'</option>';
+                $buttontext = &mt('Pick subcategory');
+            }
             for (my $k=0; $k<@{$cats[$deeper]{$cat}}; $k++) {
                 my $name = $cats[$deeper]{$cat}[$k];
                 my $item = &escape($name).':'.&escape($cat).':'.$deeper;
                 $catlinks .= '<option value="'.$item.'">'.$name.'</option>'."\n";
             }
             $catlinks .= '</select>'."\n".
-                         '&nbsp;<input type="submit" name="gocats" value="'.&mt('Change').'" />';
+                         '&nbsp;<input type="submit" name="gocats" value="'.
+                         $buttontext.'" />';
+        } elsif ($cat ne 'instcode') {
+            $catlinks .= '&nbsp;'.&mt('(No subcategories)');
         }
     }
     $catlinks .= $currcat_str.'</td></tr></table></td>';
-    return ($catlinks,$has_subcats);
+    return ($catlinks,$has_subcats,$selitem);
 }
 
 sub get_depth_values {