'.
- '';
+ $css_class ||= 'LC_breadcrumbs';
+ my $Str = "\n".'';
#
# Make the faq and bug data cascade
my $faq = '';
@@ -1163,13 +1256,22 @@ returns: nothing
if (defined($_->{'target'}) && $_->{'target'} ne '') {
$result .= 'target="'.$_->{'target'}.'" ';
}
- $result .='title="'.&mt($_->{'title'}).'">'.
- &mt($_->{'text'}).'';
+ if ($_->{'no_mt'}) {
+ $result .='title="'.$_->{'title'}.'">'.
+ $_->{'text'}.'';
+ } else {
+ $result .='title="'.&mt($_->{'title'}).'">'.
+ &mt($_->{'text'}).'';
+ }
$result;
} @Crumbs
);
$links .= '->' if ($links ne '');
- $links .= ''.&mt($last->{'text'}).' ';
+ if ($last->{'no_mt'}) {
+ $links .= ''.$last->{'text'}.' ';
+ } else {
+ $links .= ''.&mt($last->{'text'}).' ';
+ }
#
my $icons = '';
$faq = $last->{'faq'} if (exists($last->{'faq'}));
@@ -1182,18 +1284,21 @@ returns: nothing
# if ($bug ne '') {
# $icons .= &Apache::loncommon::help_open_bug($bug);
# }
- if ($helplink ne 'nohelp') {
- $icons .= &Apache::loncommon::help_open_menu($color,$component,$component_help,$function,$faq,$bug);
+ if ($faq ne '' || $component_help ne '' || $bug ne '') {
+ $icons .= &Apache::loncommon::help_open_menu($component,
+ $component_help,
+ $faq,$bug);
}
- if ($icons ne '') {
- $Str .= $icons.' ';
- }
#
- $Str .= $links.' ';
+ $Str .= $links.'';
#
if (defined($component)) {
- $Str .= ''.
- ''.&mt($component).' ';
+ $Str .= ''.
+ &mt($component);
+ if ($icons ne '') {
+ $Str .= ' '.$icons;
+ }
+ $Str .= ' ';
}
$Str .= '
'."\n";
#
@@ -1229,7 +1334,7 @@ returns: nothing
# row2
# row3 ... etc.
# &submit_row(0
-# &end_pickbox()
+# &end_pick_box()
#
# where row1, row 2 etc. are chosen from &role_select_row,&course_select_row,
# &status_select_row and &email_default_row
@@ -1271,15 +1376,14 @@ returns: nothing
# needs that are not accommodated by the *_select_row() routines.
sub start_pick_box {
- my ($table_width) = @_;
+ my ($css_class) = @_;
+ if (defined($css_class)) {
+ $css_class = 'class="'.$css_class.'"';
+ } else {
+ $css_class= 'class="LC_pick_box"';
+ }
my $output = <<"END";
-
-
-
-
-
-
-
+
END
return $output;
}
@@ -1287,76 +1391,90 @@ END
sub end_pick_box {
my $output = <<"END";
-
-
-
-
-
-
END
return $output;
}
sub row_title {
- my ($col_width,$tablecolor,$title) = @_;
+ my ($title,$css_title_class,$css_value_class) = @_;
+ $css_title_class ||= 'LC_pick_box_title';
+ $css_title_class = 'class="'.$css_title_class.'"';
+
+ $css_value_class ||= 'LC_pick_box_value';
+ $css_value_class = 'class="'.$css_value_class.'"';
+
my $output = <<"ENDONE";
-
-
-
+
+
+ $title:
-
-
-
+
ENDONE
return $output;
}
sub row_closure {
+ my ($no_separator) =@_;
my $output = <<"ENDTWO";
-
-
+ENDTWO
+ if (!$no_separator) {
+ $output .= <<"ENDTWO";
-
-
+
ENDTWO
+ }
return $output;
}
sub role_select_row {
- my ($roles,$col_width,$tablecolor,$title) = @_;
- my $output = &row_title($col_width,$tablecolor,$title);
- $output .= qq|
+ my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
+ my $output;
+ if (defined($title)) {
+ $output = &row_title($title,$css_class);
+ }
+ $output .= qq|
\n|;
foreach my $role (@$roles) {
my $plrole;
if ($role eq 'ow') {
$plrole = &mt('Course Owner');
+ } elsif ($role eq 'cr') {
+ if ($show_separate_custom) {
+ if ($cdom ne '' && $cnum ne '') {
+ my %course_customroles = &course_custom_roles($cdom,$cnum);
+ foreach my $crrole (sort(keys(%course_customroles))) {
+ my ($plcrrole) = ($crrole =~ m|^cr/[^/]+/[^/]+/(.+)$|);
+ $output .= ' '.$plcrrole.
+ ' ';
+ }
+ }
+ } else {
+ $plrole = &mt('Custom Role');
+ }
} else {
$plrole=&Apache::lonnet::plaintext($role);
}
- $output .= ' '.$plrole.' ';
+ if (($role ne 'cr') || (!$show_separate_custom)) {
+ $output .= ' '.$plrole.' ';
+ }
+ }
+ $output .= qq| \n|;
+ if (defined($title)) {
+ $output .= &row_closure();
}
- $output .= qq|
- \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 .= " \n";
+ my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,
+ $css_class) = @_;
+ my $output = &row_title($title,$css_class);
$output .= qq|
-
|;
my $courseform=''.&Apache::loncommon::selectcourse_link
- ($formname,'pickcourse','pickdomain','coursedesc').' ';
+ ($formname,'pickcourse','pickdomain','coursedesc','',1).'';
+ $output .= ' '.&mt('All courses').' ';
if ($totcodes > 0) {
- $output .= ' '.&mt('All courses');
my $numtitles = @$codetitles;
if ($numtitles > 0) {
- $output .= ' '.&mt('Pick courses by category:').' ';
+ $output .= ' '.&mt('Pick courses by category:').' ';
$output .= ''.$$codetitles[0].' '."\n".
''."\n".
@@ -1428,38 +1546,41 @@ sub course_select_row {
$output .= '
';
}
}
- $output .= ' '.&mt('Pick specific course(s):').' '.$courseform.' selected. '."\n";
+ $output .= ' '.&mt('Pick specific course(s):').' '.$courseform.' selected. '."\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|
+ my ($types,$title,$css_class) = @_;
+ my $output;
+ if (defined($title)) {
+ $output = &row_title($title,$css_class,'LC_pick_box_select');
+ }
+ $output .= qq|
\n|;
foreach my $status_type (sort(keys(%{$types}))) {
$output .= ' '.$$types{$status_type}.' ';
}
- $output .= qq|
- \n|;
- $output .= &row_closure();
+ $output .= qq| \n|;
+ if (defined($title)) {
+ $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 .= ' '.$descrip;
- $output .= &start_pick_box('50%');
- $output .= '
- '.&mt('Authentication Method').' '.&mt('Username -> e-mail conversion').'
- '."\n";
+ my ($authtypes,$title,$descrip,$css_class) = @_;
+ my $output = &row_title($title,$css_class);
+ $output .= $descrip.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ ''.&mt('Authentication Method').' '.
+ ''.&mt('Username -> e-mail conversion').' '."\n".
+ &Apache::loncommon::end_data_table_header_row();
my $rownum = 0;
foreach my $auth (sort(keys(%{$authtypes}))) {
my ($userentry,$size);
- my $rowiter = $rownum%2;
if ($auth =~ /^krb/) {
$userentry = '';
$size = 25;
@@ -1467,29 +1588,297 @@ sub email_default_row {
$userentry = 'username@';
$size = 15;
}
- $output .= ' '.$$authtypes{$auth}.' '.$userentry.' ';
- $rownum ++;
+ $output .= &Apache::loncommon::start_data_table_row().
+ ' '.$$authtypes{$auth}.' '.
+ ''.$userentry.
+ ' '.
+ &Apache::loncommon::end_data_table_row();
}
- $output .= &end_pick_box();
- $output .= " \n";
+ $output .= &Apache::loncommon::end_data_table();
$output .= &row_closure();
return $output;
}
sub submit_row {
- my ($col_width,$tablecolor,$title,$cmd,$submit_text) = @_;
- my $output = &row_title($col_width,$tablecolor,$title);
+ my ($title,$cmd,$submit_text,$css_class) = @_;
+ my $output = &row_title($title,$css_class,'LC_pick_box_submit');
$output .= qq|
-
- \n|;
+ \n|;
return $output;
}
+sub course_custom_roles {
+ my ($cdom,$cnum) = @_;
+ my %returnhash=();
+ my %coursepersonnel=&Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
+ foreach my $person (sort(keys(%coursepersonnel))) {
+ my ($role) = ($person =~ /^([^:]+):/);
+ my ($end,$start) = split(/:/,$coursepersonnel{$person});
+ if ($end == -1 && $start == -1) {
+ next;
+ }
+ if ($role =~ m|^cr/[^/]+/[^/]+/[^/]|) {
+ $returnhash{$role} ++;
+ }
+ }
+ return %returnhash;
+}
+
+
+##############################################
+##############################################
+
+# echo_form_input
+#
+# Generates html markup to add form elements from the referrer page
+# as hidden form elements (values encoded) in the new page.
+#
+# Intended to support two types of use
+# (a) to allow backing up to earlier pages in a multi-page
+# form submission process using a breadcrumb trail.
+#
+# (b) to allow the current page to be reloaded with form elements
+# set on previous page to remain unchanged. An example would
+# be where the a page containing a dynamically-built table of data is
+# is to be redisplayed, with only the sort order of the data changed.
+#
+# Inputs:
+# 1. Reference to array of form elements in the submitted form on
+# the referrer page which are to be excluded from the echoed elements.
+#
+# 2. Reference to array of regular expressions, which if matched in the
+# name of the form element n the referrer page will be omitted from echo.
+#
+# Outputs: A scalar containing the html markup for the echoed form
+# elements (all as hidden elements, with values encoded).
+
+
+sub echo_form_input {
+ my ($excluded,$regexps) = @_;
+ my $output = '';
+ foreach my $key (keys(%env)) {
+ if ($key =~ /^form\.(.+)$/) {
+ my $name = $1;
+ my $match = 0;
+ if ((!@{$excluded}) || (!grep/^$name$/,@{$excluded})) {
+ if (defined($regexps)) {
+ if (@{$regexps} > 0) {
+ foreach my $regexp (@{$regexps}) {
+ if ($name =~ /\Q$regexp\E/) {
+ $match = 1;
+ last;
+ }
+ }
+ }
+ }
+ if (!$match) {
+ if (ref($env{$key})) {
+ foreach my $value (@{$env{$key}}) {
+ $value = &HTML::Entities::encode($value,'<>&"');
+ $output .= ' '."\n";
+ }
+ } else {
+ my $value = &HTML::Entities::encode($env{$key},'<>&"');
+ $output .= ' '."\n";
+ }
+ }
+ }
+ }
+ }
+ return $output;
+}
+
+##############################################
+##############################################
+
+# set_form_elements
+#
+# Generates javascript to set form elements to values based on
+# corresponding values for the same form elements when the page was
+# previously submitted.
+#
+# Last submission values are read from hidden form elements in referring
+# page which have the same name, i.e., generated by &echo_form_input().
+#
+# Intended to be called by onload event.
+#
+# Inputs:
+# (a) Reference to hash of echoed form elements to be set.
+#
+# In the hash, keys are the form element names, and the values are the
+# element type (selectbox, radio, checkbox or text -for textbox, textarea or
+# hidden).
+#
+# (b) Optional reference to hash of stored elements to be set.
+#
+# If the page being displayed is a page which permits modification of
+# previously stored data, e.g., the first page in a multi-page submission,
+# then if stored is supplied, form elements will be set to the last stored
+# values. If user supplied values are also available for the same elements
+# these will replace the stored values.
+#
+# Output:
+#
+# javascript function - set_form_elements() which sets form elements,
+# expects an argument: formname - the name of the form according to
+# the DOM, e.g., document.compose
+
+sub set_form_elements {
+ my ($elements,$stored) = @_;
+ my %values;
+ my $output .= 'function setFormElements(courseForm) {
+';
+ if (defined($stored)) {
+ foreach my $name (keys(%{$stored})) {
+ if (exists($$elements{$name})) {
+ if (ref($$stored{$name}) eq 'ARRAY') {
+ $values{$name} = $$stored{$name};
+ } else {
+ @{$values{$name}} = ($$stored{$name});
+ }
+ }
+ }
+ }
+
+ foreach my $key (keys(%env)) {
+ if ($key =~ /^form\.(.+)$/) {
+ my $name = $1;
+ if (exists($$elements{$name})) {
+ @{$values{$name}} = &Apache::loncommon::get_env_multiple($key);
+ }
+ }
+ }
+
+ foreach my $name (keys(%values)) {
+ for (my $i=0; $i<@{$values{$name}}; $i++) {
+ $values{$name}[$i] = &HTML::Entities::decode($values{$name}[$i],'<>&"');
+ $values{$name}[$i] =~ s/([\r\n\f]+)/\\n/g;
+ $values{$name}[$i] =~ s/"/\\"/g;
+ }
+ if ($$elements{$name} eq 'text') {
+ my $numvalues = @{$values{$name}};
+ if ($numvalues > 1) {
+ my $valuestring = join('","',@{$values{$name}});
+ $output .= qq|
+ var textvalues = new Array ("$valuestring");
+ var total = courseForm.elements['$name'].length;
+ if (total > $numvalues) {
+ total = $numvalues;
+ }
+ for (var i=0; i= 0) {
+ return true;
+ }
+ return false;
+ }
+}
+END
+ return $scripttag;
+}
+
1;
__END__
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.