--- loncom/interface/loncommon.pm 2008/06/24 16:44:22 1.662
+++ loncom/interface/loncommon.pm 2008/07/08 01:08:57 1.667
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.662 2008/06/24 16:44:22 bisitz Exp $
+# $Id: loncommon.pm,v 1.667 2008/07/08 01:08:57 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -878,7 +878,7 @@ sub help_open_topic {
# Add the graphic
my $title = &mt('Online Help');
- my $helpicon=&lonhttpdurl("/res/adm/pages/help.png");
+ my $helpicon=&lonhttpdurl("/adm/help/help.png");
$template .= <<"ENDTEMPLATE";
ENDTEMPLATE
@@ -4569,6 +4569,10 @@ td.LC_menubuttons_img {
text-align: right;
}
+.LC_roleslog_note {
+ font-size: smaller;
+}
+
table.LC_aboutme_port {
border: 0px;
border-collapse: collapse;
@@ -8272,11 +8276,15 @@ domain - to an array. Also generates ja
generate Domain Coordinator interface for editing Course Categories.
Inputs:
+
categories (reference to hash of category definitions).
+
cats (reference to array of arrays/hashes which encapsulates hierarchy of
categories and subcategories).
+
idx (reference to hash of counters used in Domain Coordinator interface for
editing Course Categories).
+
jsarray (reference to array of categories used to create Javascript arrays for
Domain Coordinator interface for editing Course Categories).
@@ -8319,17 +8327,26 @@ sub gather_categories {
Used to generate breadcrumb trails for course categories.
Inputs:
+
categories (reference to hash of category definitions).
+
cats (reference to array of arrays/hashes which encapsulates hierarchy of
categories and subcategories).
+
trails (reference to array of breacrumb trails for each category).
+
allitems (reference to hash - key is category key
(format: escaped(name):escaped(parent category):depth in hierarchy).
+
idx (reference to hash of counters used in Domain Coordinator interface for
editing Course Categories).
+
jsarray (reference to array of categories used to create Javascript arrays for
Domain Coordinator interface for editing Course Categories).
+subcats (reference to hash of arrays containing all subcategories within each
+ category, -recursive)
+
Returns: nothing
Side effects: populates trails and allitems hash references.
@@ -8337,7 +8354,7 @@ Side effects: populates trails and allit
=cut
sub extract_categories {
- my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_;
+ my ($categories,$cats,$trails,$allitems,$idx,$jsarray,$subcats) = @_;
if (ref($categories) eq 'HASH') {
&gather_categories($categories,$cats,$idx,$jsarray);
if (ref($cats->[0]) eq 'ARRAY') {
@@ -8358,7 +8375,14 @@ sub extract_categories {
if (ref($cats->[1]{$name}) eq 'ARRAY') {
for (my $j=0; $j<@{$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} = [];
}
}
}
@@ -8374,13 +8398,19 @@ sub extract_categories {
Recursively used to generate breadcrumb trails for course categories.
Inputs:
+
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).
-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
(format: escaped(name):escaped(parent category):depth in hierarchy).
+
parents (array containing containers directories for current category,
back to top level).
@@ -8388,12 +8418,10 @@ Returns: nothing
Side effects: populates trails and allitems hash references
-=back
-
=cut
sub recurse_categories {
- my ($cats,$depth,$category,$trails,$allitems,$parents) = @_;
+ my ($cats,$depth,$category,$trails,$allitems,$parents,$subcats) = @_;
my $shallower = $depth - 1;
if (ref($cats->[$depth]{$category}) eq 'ARRAY') {
for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) {
@@ -8406,7 +8434,21 @@ sub recurse_categories {
}
my $deeper = $depth+1;
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});
}
} else {
@@ -8420,17 +8462,144 @@ sub recurse_categories {
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 .= '
'; + if (ref($path) eq 'ARRAY') { + push(@{$path},$name); + $text .= &assign_category_rows($itemcount,$cats,$deeper,$name,$path,$currcategories); + pop(@{$path}); + } + $text .= ' |