Diff for /loncom/interface/loncommon.pm between versions 1.662 and 1.665

version 1.662, 2008/06/24 16:44:22 version 1.665, 2008/07/07 15:10:23
Line 8272  domain - to an array.  Also generates ja Line 8272  domain - to an array.  Also generates ja
 generate Domain Coordinator interface for editing Course Categories.  generate Domain Coordinator interface for editing Course Categories.
   
 Inputs:  Inputs:
   
 categories (reference to hash of category definitions).  categories (reference to hash of category definitions).
   
 cats (reference to array of arrays/hashes which encapsulates hierarchy of  cats (reference to array of arrays/hashes which encapsulates hierarchy of
       categories and subcategories).        categories and subcategories).
   
 idx (reference to hash of counters used in Domain Coordinator interface for   idx (reference to hash of counters used in Domain Coordinator interface for 
       editing Course Categories).        editing Course Categories).
   
 jsarray (reference to array of categories used to create Javascript arrays for  jsarray (reference to array of categories used to create Javascript arrays for
          Domain Coordinator interface for editing Course Categories).           Domain Coordinator interface for editing Course Categories).
   
Line 8319  sub gather_categories { Line 8323  sub gather_categories {
 Used to generate breadcrumb trails for course categories.  Used to generate breadcrumb trails for course categories.
   
 Inputs:  Inputs:
   
 categories (reference to hash of category definitions).  categories (reference to hash of category definitions).
   
 cats (reference to array of arrays/hashes which encapsulates hierarchy of  cats (reference to array of arrays/hashes which encapsulates hierarchy of
       categories and subcategories).        categories and subcategories).
   
 trails (reference to array of breacrumb trails for each category).  trails (reference to array of breacrumb trails for each category).
   
 allitems (reference to hash - key is category key   allitems (reference to hash - key is category key 
          (format: escaped(name):escaped(parent category):depth in hierarchy).           (format: escaped(name):escaped(parent category):depth in hierarchy).
   
 idx (reference to hash of counters used in Domain Coordinator interface for  idx (reference to hash of counters used in Domain Coordinator interface for
       editing Course Categories).        editing Course Categories).
   
 jsarray (reference to array of categories used to create Javascript arrays for  jsarray (reference to array of categories used to create Javascript arrays for
          Domain Coordinator interface for editing Course Categories).           Domain Coordinator interface for editing Course Categories).
   
   subcats (reference to hash of arrays containing all subcategories within each 
            category, -recursive)
   
 Returns: nothing  Returns: nothing
   
 Side effects: populates trails and allitems hash references.  Side effects: populates trails and allitems hash references.
Line 8337  Side effects: populates trails and allit Line 8350  Side effects: populates trails and allit
 =cut  =cut
   
 sub extract_categories {  sub extract_categories {
     my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_;      my ($categories,$cats,$trails,$allitems,$idx,$jsarray,$subcats) = @_;
     if (ref($categories) eq 'HASH') {      if (ref($categories) eq 'HASH') {
         &gather_categories($categories,$cats,$idx,$jsarray);          &gather_categories($categories,$cats,$idx,$jsarray);
         if (ref($cats->[0]) eq 'ARRAY') {          if (ref($cats->[0]) eq 'ARRAY') {
Line 8358  sub extract_categories { Line 8371  sub extract_categories {
                 if (ref($cats->[1]{$name}) eq 'ARRAY') {                  if (ref($cats->[1]{$name}) eq 'ARRAY') {
                     for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) {                      for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) {
                         my $category = $cats->[1]{$name}[$j];                          my $category = $cats->[1]{$name}[$j];
                         &recurse_categories($cats,2,$category,$trails,$allitems,\@parents);                          if (ref($subcats) eq 'HASH') {
                               push(@{$subcats->{$item}},&escape($category).':'.&escape($name).':1');
                           }
                           &recurse_categories($cats,2,$category,$trails,$allitems,\@parents,$subcats);
                       }
                   } else {
                       if (ref($subcats) eq 'HASH') {
                           $subcats->{$item} = [];
                     }                      }
                 }                  }
             }              }
Line 8374  sub extract_categories { Line 8394  sub extract_categories {
 Recursively used to generate breadcrumb trails for course categories.  Recursively used to generate breadcrumb trails for course categories.
   
 Inputs:  Inputs:
   
 cats (reference to array of arrays/hashes which encapsulates hierarchy of  cats (reference to array of arrays/hashes which encapsulates hierarchy of
       categories and subcategories).        categories and subcategories).
   
 depth (current depth in hierarchy of categories and sub-categories - 0 indexed).  depth (current depth in hierarchy of categories and sub-categories - 0 indexed).
 category (current course category, for which breadcrumb trail is being generated).     
 trails (reference to array of breacrumb trails for each category).  category (current course category, for which breadcrumb trail is being generated).
   
   trails (reference to array of breadcrumb trails for each category).
   
 allitems (reference to hash - key is category key  allitems (reference to hash - key is category key
          (format: escaped(name):escaped(parent category):depth in hierarchy).           (format: escaped(name):escaped(parent category):depth in hierarchy).
   
 parents (array containing containers directories for current category,   parents (array containing containers directories for current category, 
          back to top level).            back to top level). 
   
Line 8388  Returns: nothing Line 8414  Returns: nothing
   
 Side effects: populates trails and allitems hash references  Side effects: populates trails and allitems hash references
   
 =back  
   
 =cut  =cut
   
 sub recurse_categories {  sub recurse_categories {
     my ($cats,$depth,$category,$trails,$allitems,$parents) = @_;      my ($cats,$depth,$category,$trails,$allitems,$parents,$subcats) = @_;
     my $shallower = $depth - 1;      my $shallower = $depth - 1;
     if (ref($cats->[$depth]{$category}) eq 'ARRAY') {      if (ref($cats->[$depth]{$category}) eq 'ARRAY') {
         for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) {          for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) {
Line 8406  sub recurse_categories { Line 8430  sub recurse_categories {
             }              }
             my $deeper = $depth+1;              my $deeper = $depth+1;
             push(@{$parents},$category);              push(@{$parents},$category);
             &recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents);              if (ref($subcats) eq 'HASH') {
                   my $subcat = &escape($name).':'.$category.':'.$depth;
                   for (my $j=@{$parents}; $j>=0; $j--) {
                       my $higher;
                       if ($j > 0) {
                           $higher = &escape($parents->[$j]).':'.
                                     &escape($parents->[$j-1]).':'.$j;
                       } else {
                           $higher = &escape($parents->[$j]).'::'.$j;
                       }
                       push(@{$subcats->{$higher}},$subcat);
                   }
               }
               &recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents,
                                   $subcats);
             pop(@{$parents});              pop(@{$parents});
         }          }
     } else {      } else {
Line 8420  sub recurse_categories { Line 8458  sub recurse_categories {
     return;      return;
 }  }
   
   =pod
   
   =item *&assign_categories_table()
   
   Create a datatable for display of hierarchical categories in a domain,
   with checkboxes to allow a course to be categorized. 
   
   Inputs:
   
   cathash - reference to hash of categories defined for the domain (from
             configuration.db)
   
   currcat - scalar with an & separated list of categories assigned to a course. 
   
   Returns: $output (markup to be displayed) 
   
   =cut
   
   sub assign_categories_table {
       my ($cathash,$currcat) = @_;
       my $output;
       if (ref($cathash) eq 'HASH') {
           my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);
           &extract_categories($cathash,\@cats,\@trails,\%allitems,\%idx,\@jsarray);
           $maxdepth = scalar(@cats);
           if (@cats > 0) {
               my $itemcount = 0;
               if (ref($cats[0]) eq 'ARRAY') {
                   $output = &Apache::loncommon::start_data_table();
                   my @currcategories;
                   if ($currcat ne '') {
                       @currcategories = split('&',$currcat);
                   }
                   for (my $i=0; $i<@{$cats[0]}; $i++) {
                       my $parent = $cats[0][$i];
                       my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                       next if ($parent eq 'instcode');
                       my $item = &escape($parent).'::0';
                       my $checked = '';
                       if (@currcategories > 0) {
                           if (grep(/^\Q$item\E$/,@currcategories)) {
                               $checked = ' checked="checked" ';
                           }
                       }
                       $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'
                                  .'<input type="checkbox" name="usecategory" value="'.
                                  $item.'"'.$checked.' />'.&escape($parent).'</span></td>';
                       my $depth = 1;
                       push(@path,$parent);
                       $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
                       pop(@path);
                       $output .= '</tr><tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr>';
                       $itemcount ++;
                   }
                   $output .= &Apache::loncommon::end_data_table();
               }
           }
       }
       return $output;
   }
   
   =pod
   
   =item *&assign_category_rows()
   
   Create a datatable row for display of nested categories in a domain,
   with checkboxes to allow a course to be categorized,called recursively.
   
   Inputs:
   
   itemcount - track row number for alternating colors
   
   cats - reference to array of arrays/hashes which encapsulates hierarchy of
         categories and subcategories.
   
   depth - current depth in hierarchy of categories and sub-categories - 0 indexed.
   
   parent - parent of current category item
   
   path - Array containing all categories back up through the hierarchy from the
          current category to the top level.
   
   currcategories - reference to array of current categories assigned to the course
   
   Returns: $output (markup to be displayed).
   
   =cut
   
   sub assign_category_rows {
       my ($itemcount,$cats,$depth,$parent,$path,$currcategories) = @_;
       my ($text,$name,$item,$chgstr);
       if (ref($cats) eq 'ARRAY') {
           my $maxdepth = scalar(@{$cats});
           if (ref($cats->[$depth]) eq 'HASH') {
               if (ref($cats->[$depth]{$parent}) eq 'ARRAY') {
                   my $numchildren = @{$cats->[$depth]{$parent}};
                   my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                   $text .= '<td><table class="LC_datatable">';
                   for (my $j=0; $j<$numchildren; $j++) {
                       $name = $cats->[$depth]{$parent}[$j];
                       $item = &escape($name).':'.&escape($parent).':'.$depth;
                       my $deeper = $depth+1;
                       my $checked = '';
                       if (ref($currcategories) eq 'ARRAY') {
                           if (@{$currcategories} > 0) {
                               if (grep(/^\Q$item\E$/,@{$currcategories})) {
                                   $checked = ' checked="checked" ';
                               }
                           }
                       }
                       $text .= '<tr><td><span class="LC_nobreak"><label>'.
                                '<input type="checkbox" name="usecategory" value="'.
                                $item.'"'.$checked.' />'.$name.'</label></span></td><td>';
                       if (ref($path) eq 'ARRAY') {
                           push(@{$path},$name);
                           $text .= &assign_category_rows($itemcount,$cats,$deeper,$name,$path,$currcategories);
                           pop(@{$path});
                       }
                       $text .= '</td></tr>';
                   }
                   $text .= '</table></td>';
               }
           }
       }
       return $text;
   }
   
 ############################################################  ############################################################
 ############################################################  ############################################################
   
   
 sub commit_customrole {  sub commit_customrole {
     my ($udom,$uname,$url,$three,$four,$five,$start,$end) = @_;      my ($udom,$uname,$url,$three,$four,$five,$start,$end,$context) = @_;
     my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.':'.$three.' in '.$url.      my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.':'.$three.' in '.$url.
                          ($start?', '.&mt('starting').' '.localtime($start):'').                           ($start?', '.&mt('starting').' '.localtime($start):'').
                          ($end?', ending '.localtime($end):'').': <b>'.                           ($end?', ending '.localtime($end):'').': <b>'.
               &Apache::lonnet::assigncustomrole(                &Apache::lonnet::assigncustomrole(
                  $udom,$uname,$url,$three,$four,$five,$end,$start).                   $udom,$uname,$url,$three,$four,$five,$end,$start,undef,undef,$context).
                  '</b><br />';                   '</b><br />';
     return $output;      return $output;
 }  }

Removed from v.1.662  
changed lines
  Added in v.1.665


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