--- loncom/interface/loncreateuser.pm 2010/01/19 23:41:43 1.295.2.26
+++ loncom/interface/loncreateuser.pm 2009/11/03 21:31:06 1.322
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.295.2.26 2010/01/19 23:41:43 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.322 2009/11/03 21:31:06 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -51,14 +51,13 @@ In LON-CAPA, roles are actually collecti
Assistant", "Course Coordinator", and other such roles are really just
collection of privileges that are useful in many circumstances.
-Custom roles can be defined by a Domain Coordinator, Course Coordinator
-or Community Coordinator via the Manage User functionality.
-The custom role editor screen will show all privileges which can be
-assigned to users. For a complete list of privileges, please see
-C.
+Creating custom roles can be done by the Domain Coordinator through
+the Create User functionality. That screen will show all privileges
+that can be assigned to users. For a complete list of privileges,
+please see C.
-Custom role definitions are stored in the C$lt{'ecrp'}
+$choice $lt{'nr'}:
+
+
+ENDCUSTOM
}
} else {
my $actiontext = $lt{'srad'};
@@ -574,7 +547,8 @@ sub print_username_entry_form {
$actiontext = $lt{'srst'};
}
}
- $r->print("$actiontext
");
+ $r->print("
+$actiontext
");
if ($env{'form.origform'} ne 'crtusername') {
$r->print("\n".$response);
}
@@ -583,44 +557,6 @@ sub print_username_entry_form {
$r->print(&Apache::loncommon::end_page());
}
-sub customrole_javascript {
- my $js = <<"END";
-
-END
- return $js;
-}
-
sub entry_form {
my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_;
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
@@ -674,7 +610,7 @@ ENDBLOCK
);
my $sellink=&Apache::loncommon::selectstudent_link('crtusername','srchterm','srchdomain');
my ($title,$buttontext,$showresponse);
- if ($env{'form.action'} eq 'singlestudent') {
+ if ($env{'form.action'} eq 'singlestudent') {
if ($crstype eq 'Community') {
$title = $lt{'enrm'};
} else {
@@ -1027,24 +963,10 @@ sub print_user_modification_page {
ENDFORMINFO
- my (%inccourses,$roledom);
- if ($context eq 'course') {
- $inccourses{$env{'request.course.id'}}=1;
- $roledom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- } elsif ($context eq 'author') {
- $roledom = $env{'request.role.domain'};
- } elsif ($context eq 'domain') {
- foreach my $key (keys(%env)) {
- $roledom = $env{'request.role.domain'};
- if ($key=~/^user\.priv\.cm\.\/($roledom)\/($match_username)/) {
- $inccourses{$1.'_'.$2}=1;
- }
- }
- } else {
- foreach my $key (keys(%env)) {
- if ($key=~/^user\.priv\.cm\.\/($match_domain)\/($match_username)/) {
- $inccourses{$1.'_'.$2}=1;
- }
+ my %inccourses;
+ foreach my $key (keys(%env)) {
+ if ($key=~/^user\.priv\.cm\.\/($match_domain)\/($match_username)/) {
+ $inccourses{$1.'_'.$2}=1;
}
}
if ($newuser) {
@@ -1281,10 +1203,10 @@ ENDNOTOOLSPRIV
}
$r->print('');
if ($env{'form.action'} ne 'singlestudent') {
- &display_existing_roles($r,$ccuname,$ccdomain,\%inccourses,$context,
- $roledom,$crstype);
+ &display_existing_roles($r,$ccuname,$ccdomain,\%inccourses);
}
} ## End of new user/old user logic
+
if ($env{'form.action'} eq 'singlestudent') {
my $btntxt;
if ($crstype eq 'Community') {
@@ -1402,9 +1324,13 @@ sub validation_javascript {
}
sub display_existing_roles {
- my ($r,$ccuname,$ccdomain,$inccourses,$context,$roledom,$crstype) = @_;
- my $now=time;
- my %lt=&Apache::lonlocal::texthash(
+ my ($r,$ccuname,$ccdomain,$inccourses) = @_;
+ my %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname);
+ # Build up table of user roles to allow revocation and re-enabling of roles.
+ my ($tmp) = keys(%rolesdump);
+ if ($tmp !~ /^(con_lost|error)/i) {
+ my $now=time;
+ my %lt=&Apache::lonlocal::texthash(
'rer' => "Existing Roles",
'rev' => "Revoke",
'del' => "Delete",
@@ -1414,240 +1340,182 @@ sub display_existing_roles {
'sta' => "Start",
'end' => "End",
);
- my (%rolesdump,%roletext,%sortrole,%roleclass,%rolepriv);
- if ($context eq 'course' || $context eq 'author') {
- my @roles = &Apache::lonuserutils::roles_by_context($context,1,$crstype);
- my %roleshash =
- &Apache::lonnet::get_my_roles($ccuname,$ccdomain,'userroles',
- ['active','previous','future'],\@roles,$roledom,1);
- foreach my $key (keys(%roleshash)) {
- my ($start,$end) = split(':',$roleshash{$key});
- next if ($start eq '-1' || $end eq '-1');
- my ($rnum,$rdom,$role,$sec) = split(':',$key);
- if ($context eq 'course') {
- next unless (($rnum eq $env{'course.'.$env{'request.course.id'}.'.num'})
- && ($rdom eq $env{'course.'.$env{'request.course.id'}.'.domain'}));
- } elsif ($context eq 'author') {
- next unless (($rnum eq $env{'user.name'}) && ($rdom eq $env{'request.role.domain'}));
- }
- my ($newkey,$newvalue,$newrole);
- $newkey = '/'.$rdom.'/'.$rnum;
- if ($sec ne '') {
- $newkey .= '/'.$sec;
- }
- $newvalue = $role;
- if ($role =~ /^cr/) {
- $newrole = 'cr';
- } else {
- $newrole = $role;
- }
- $newkey .= '_'.$newrole;
- if ($start ne '' && $end ne '') {
- $newvalue .= '_'.$end.'_'.$start;
- }
- $rolesdump{$newkey} = $newvalue;
- }
- } else {
- %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname);
- }
- # Build up table of user roles to allow revocation and re-enabling of roles.
- my ($tmp) = keys(%rolesdump);
- return if ($tmp =~ /^(con_lost|error)/i);
- foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]);
- my $b1=join('_',(split('_',$b))[1,0]);
- return $a1 cmp $b1;
- } keys(%rolesdump)) {
- next if ($area =~ /^rolesdef/);
- my $envkey=$area;
- my $role = $rolesdump{$area};
- my $thisrole=$area;
- $area =~ s/\_\w\w$//;
- my ($role_code,$role_end_time,$role_start_time) =
- split(/_/,$role);
+ my (%roletext,%sortrole,%roleclass,%rolepriv);
+ foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]);
+ my $b1=join('_',(split('_',$b))[1,0]);
+ return $a1 cmp $b1;
+ } keys(%rolesdump)) {
+ next if ($area =~ /^rolesdef/);
+ my $envkey=$area;
+ my $role = $rolesdump{$area};
+ my $thisrole=$area;
+ $area =~ s/\_\w\w$//;
+ my ($role_code,$role_end_time,$role_start_time) =
+ split(/_/,$role);
# Is this a custom role? Get role owner and title.
- my ($croleudom,$croleuname,$croletitle)=
- ($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$});
- my $allowed=0;
- my $delallowed=0;
- my $sortkey=$role_code;
- my $class='Unknown';
- if ($area =~ m{^/($match_domain)/($match_courseid)} ) {
- $class='Course';
- my ($coursedom,$coursedir) = ($1,$2);
- $sortkey.="\0$coursedom";
- # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).
- my %coursedata=
- &Apache::lonnet::coursedescription($1.'_'.$2);
- if ($coursedir =~ /^$match_community$/) {
- $class='Community';
- }
- $sortkey.="\0$coursedom";
- my $carea;
- if (defined($coursedata{'description'})) {
- $carea=$coursedata{'description'}.
- '
'.&mt('Domain').': '.$coursedom.(' 'x8).
+ my ($croleudom,$croleuname,$croletitle)=
+ ($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$});
+ my $allowed=0;
+ my $delallowed=0;
+ my $sortkey=$role_code;
+ my $class='Unknown';
+ if ($area =~ m{^/($match_domain)/($match_courseid)} ) {
+ $class='Course';
+ my ($coursedom,$coursedir) = ($1,$2);
+ $sortkey.="\0$coursedom";
+ # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).
+ my %coursedata=
+ &Apache::lonnet::coursedescription($1.'_'.$2);
+ my $carea;
+ if (defined($coursedata{'description'})) {
+ $carea=$coursedata{'description'}.
+ '
'.&mt('Domain').': '.$coursedom.(' 'x8).
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$coursedir,$coursedom);
- $sortkey.="\0".$coursedata{'description'};
- $class=$coursedata{'type'};
- } else {
- if ($class eq 'Community') {
- $carea=&mt('Unavailable community').': '.$area;
- $sortkey.="\0".&mt('Unavailable community').': '.$area;
+ $sortkey.="\0".$coursedata{'description'};
+ $class=$coursedata{'type'};
} else {
$carea=&mt('Unavailable course').': '.$area;
$sortkey.="\0".&mt('Unavailable course').': '.$area;
}
- }
- $sortkey.="\0$coursedir";
- $inccourses->{$1.'_'.$2}=1;
- if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||
- (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
- $allowed=1;
- }
- unless ($allowed) {
- my $isowner = &is_courseowner($cid,$coursedata{'internal.courseowner'});
- if ($isowner) {
- if (($role_code eq 'co') && ($class eq 'Community')) {
- $allowed = 1;
- } elsif (($role_code eq 'cc') && ($class eq 'Course')) {
- $allowed = 1;
- }
- }
- }
- if ((&Apache::lonnet::allowed('dro',$1)) ||
- (&Apache::lonnet::allowed('dro',$ccdomain))) {
- $delallowed=1;
- }
-# - custom role. Needs more info, too
- if ($croletitle) {
- if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) {
- $allowed=1;
- $thisrole.='.'.$role_code;
- }
- }
- if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) {
- $carea.='
Section: '.$3;
- $sortkey.="\0$3";
- if (!$allowed) {
- if ($env{'request.course.sec'} eq $3) {
- if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {
- $allowed = 1;
- }
- }
- }
- }
- $area=$carea;
- } else {
- $sortkey.="\0".$area;
- # Determine if current user is able to revoke privileges
- if ($area=~m{^/($match_domain)/}) {
- if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||
+ $sortkey.="\0$coursedir";
+ $inccourses->{$1.'_'.$2}=1;
+ if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||
(&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
$allowed=1;
}
- if (((&Apache::lonnet::allowed('dro',$1)) ||
- (&Apache::lonnet::allowed('dro',$ccdomain))) &&
- ($role_code ne 'dc')) {
+ if ((&Apache::lonnet::allowed('dro',$1)) ||
+ (&Apache::lonnet::allowed('dro',$ccdomain))) {
$delallowed=1;
}
+# - custom role. Needs more info, too
+ if ($croletitle) {
+ if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) {
+ $allowed=1;
+ $thisrole.='.'.$role_code;
+ }
+ }
+ # Compute the background color based on $area
+ if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) {
+ $carea.='
Section: '.$3;
+ $sortkey.="\0$3";
+ if (!$allowed) {
+ if ($env{'request.course.sec'} eq $3) {
+ if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {
+ $allowed = 1;
+ }
+ }
+ }
+ }
+ $area=$carea;
} else {
- if (&Apache::lonnet::allowed('c'.$role_code,'/')) {
+ $sortkey.="\0".$area;
+ # Determine if current user is able to revoke privileges
+ if ($area=~m{^/($match_domain)/}) {
+ if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||
+ (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
+ $allowed=1;
+ }
+ if (((&Apache::lonnet::allowed('dro',$1)) ||
+ (&Apache::lonnet::allowed('dro',$ccdomain))) &&
+ ($role_code ne 'dc')) {
+ $delallowed=1;
+ }
+ } else {
+ if (&Apache::lonnet::allowed('c'.$role_code,'/')) {
+ $allowed=1;
+ }
+ }
+ if ($role_code eq 'ca' || $role_code eq 'au') {
+ $class='Construction Space';
+ } elsif ($role_code eq 'su') {
+ $class='System';
+ } else {
+ $class='Domain';
+ }
+ }
+ if (($role_code eq 'ca') || ($role_code eq 'aa')) {
+ $area=~m{/($match_domain)/($match_username)};
+ if (&Apache::lonuserutils::authorpriv($2,$1)) {
$allowed=1;
+ } else {
+ $allowed=0;
}
}
- if ($role_code eq 'ca' || $role_code eq 'au') {
- $class='Construction Space';
- } elsif ($role_code eq 'su') {
- $class='System';
+ my $row = '';
+ $row.= '';
+ my $active=1;
+ $active=0 if (($role_end_time) && ($now>$role_end_time));
+ if (($active) && ($allowed)) {
+ $row.= '';
} else {
- $class='Domain';
+ if ($active) {
+ $row.=' ';
+ } else {
+ $row.=&mt('expired or revoked');
+ }
}
- }
- if (($role_code eq 'ca') || ($role_code eq 'aa')) {
- $area=~m{/($match_domain)/($match_username)};
- if (&Apache::lonuserutils::authorpriv($2,$1)) {
- $allowed=1;
+ $row.=' ';
+ if ($allowed && !$active) {
+ $row.= '';
} else {
- $allowed=0;
+ $row.=' ';
}
- }
- my $row = '';
- $row.= ' ';
- my $active=1;
- $active=0 if (($role_end_time) && ($now>$role_end_time));
- if (($active) && ($allowed)) {
- $row.= '';
- } else {
- if ($active) {
- $row.=' ';
+ $row.=' ';
+ if ($delallowed) {
+ $row.= '';
} else {
- $row.=&mt('expired or revoked');
+ $row.=' ';
}
- }
- $row.=' ';
- if ($allowed && !$active) {
- $row.= '';
- } else {
- $row.=' ';
- }
- $row.=' ';
- if ($delallowed) {
- $row.= '';
- } else {
- $row.=' ';
- }
- my $plaintext='';
- if (!$croletitle) {
- $plaintext=&Apache::lonnet::plaintext($role_code,$class)
- } else {
- $plaintext=
+ my $plaintext='';
+ if (!$croletitle) {
+ $plaintext=&Apache::lonnet::plaintext($role_code,$class)
+ } else {
+ $plaintext=
"Customrole '$croletitle'
defined by $croleuname\@$croleudom";
- }
- $row.= ''.$plaintext.
- ' '.$area.
- ' '.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
- : ' ' ).
- ' '.($role_end_time ?&Apache::lonlocal::locallocaltime($role_end_time)
- : ' ' )
- ." ";
- $sortrole{$sortkey}=$envkey;
- $roletext{$envkey}=$row;
- $roleclass{$envkey}=$class;
- $rolepriv{$envkey}=$allowed;
- } # end of foreach (table building loop)
- my $rolesdisplay = 0;
- my %output = ();
- foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
- $output{$type} = '';
- foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
- if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {
- $output{$type}.=
- &Apache::loncommon::start_data_table_row().
- $roletext{$sortrole{$which}}.
- &Apache::loncommon::end_data_table_row();
- }
- }
- unless($output{$type} eq '') {
- $output{$type} = ''.
- " ".
- $output{$type};
- $rolesdisplay = 1;
- }
- }
- if ($rolesdisplay == 1) {
- my $contextrole='';
- if ($env{'request.course.id'}) {
- if (&Apache::loncommon::course_type() eq 'Community') {
- $contextrole = &mt('Existing Roles in this Community');
+ }
+ $row.= '".&mt($type)." '.$plaintext.
+ ' '.$area.
+ ' '.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
+ : ' ' ).
+ ' '.($role_end_time ?&Apache::lonlocal::locallocaltime($role_end_time)
+ : ' ' )
+ ." ";
+ $sortrole{$sortkey}=$envkey;
+ $roletext{$envkey}=$row;
+ $roleclass{$envkey}=$class;
+ $rolepriv{$envkey}=$allowed;
+ #$r->print($row);
+ } # end of foreach (table building loop)
+ my $rolesdisplay = 0;
+ my %output = ();
+ foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
+ $output{$type} = '';
+ foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
+ if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {
+ $output{$type}.=
+ &Apache::loncommon::start_data_table_row().
+ $roletext{$sortrole{$which}}.
+ &Apache::loncommon::end_data_table_row();
+ }
+ }
+ unless($output{$type} eq '') {
+ $output{$type} = ''.
+ " ".
+ $output{$type};
+ $rolesdisplay = 1;
+ }
+ }
+ if ($rolesdisplay == 1) {
+ my $contextrole='';
+ if ($env{'request.course.id'}) {
+ my $crstype = &Apache::loncommon::course_type();
+ $contextrole = "Existing Roles in this $crstype";
+ } elsif ($env{'request.role'} =~ /^au\./) {
+ $contextrole = 'Existing Co-Author Roles in your Construction Space';
} else {
- $contextrole = &mt('Existing Roles in this Course');
+ $contextrole = 'Existing Roles in this Domain';
}
- } elsif ($env{'request.role'} =~ /^au\./) {
- $contextrole = 'Existing Co-Author Roles in your Construction Space';
- } else {
- $contextrole = 'Existing Roles in this Domain';
- }
- $r->print('
+ $r->print('
".&mt($type)." '.$lt{'rer'}.'
'.
''.$lt{'rol'}.' '.$lt{'ext'}.
' '.$lt{'sta'}.' '.$lt{'end'}.' '.
&Apache::loncommon::end_data_table_header_row());
- foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
- if ($output{$type}) {
- $r->print($output{$type}."\n");
+ foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
+ if ($output{$type}) {
+ $r->print($output{$type}."\n");
+ }
}
+ $r->print(&Apache::loncommon::end_data_table());
}
- $r->print(&Apache::loncommon::end_data_table());
- }
+ } # End of check for keys in rolesdump
return;
}
@@ -2273,7 +2142,7 @@ sub update_user_data {
$env{'form.ccuname'}, $env{'form.ccdomain'}).'');
my (%alerts,%rulematch,%inst_results,%curr_rules);
my @usertools = ('aboutme','blog','portfolio');
- my @requestcourses = ('official','unofficial');
+ my @requestcourses = ('official','unofficial','community');
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
if ($env{'form.makeuser'}) {
@@ -2674,11 +2543,13 @@ sub update_user_data {
($env{'user.domain'} eq $env{'form.ccdomain'})) {
my %newenvhash;
foreach my $key (keys(%changed)) {
- if (($key eq 'official') || ($key eq 'unofficial')) {
+ if (($key eq 'official') || ($key eq 'unofficial')
+ || ($key eq 'community')) {
$newenvhash{'environment.requestcourses.'.$key} =
$changeHash{'requestcourses.'.$key};
if ($changeHash{'requestcourses.'.$key} ne '') {
- $newenvhash{'environment.canrequest.'.$key} = 1;
+ $newenvhash{'environment.canrequest.'.$key} =
+ $changeHash{'requestcourses.'.$key};
} else {
$newenvhash{'environment.canrequest.'.$key} =
&Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
@@ -2735,6 +2606,7 @@ sub update_user_data {
'portfolio' => 'Portfolio Availability',
'official' => 'Can Request Official Courses',
'unofficial' => 'Can Request Unofficial Courses',
+ 'community' => 'Can Request Communities',
'inststatus' => "Affiliation",
'prvs' => 'Previous Value:',
'chto' => 'Changed To:'
@@ -2888,6 +2760,7 @@ END
'portfolio' => "Portfolio Availability",
'official' => "Can Request Official Courses",
'unofficial' => "Can Request Unofficial Courses",
+ 'community' => "Can Request Communities",
'inststatus' => "Affiliation",
);
$r->print(<<"END");
@@ -3479,8 +3352,8 @@ sub enroll_single_student {
$r->print(&mt('If the member is currently logged-in to LON-CAPA, the new role will be available when the member next logs in.'));
} else {
$r->print(&mt('If the student is currently logged-in to LON-CAPA, the new role will be available when the student next logs in.'));
- }
- $r->print('
'; - if (exists($menu_item->{'help'})) { - $menu_html.= - &Apache::loncommon::help_open_topic($menu_item->{'help'}); - } - $menu_html.=''; - if (exists($menu_item->{'url'})) { - $menu_html.=qq{}; - } else { - $menu_html.= - qq{}; } - $menu_html.= &mt($menu_item->{'text'}).''; - $menu_html.='
'; - } - return $menu_html; } sub restore_prev_selections { @@ -4670,9 +4578,7 @@ ENDSCRIPT if (ref($lt) eq 'HASH') { $title = $lt->{$item}; } - $output .= - &Apache::lonhtmlcommon::row_title($title, - 'LC_selfenroll_pick_box_title','LC_oddrow_value')."\n"; + $output .= &Apache::lonhtmlcommon::row_title($title); if ($item eq 'types') { my $curr_types = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_types'}; my $showdomdesc = 1; @@ -5171,13 +5077,6 @@ sub print_userchangelogs_display { my (%whodunit,%changed,$version); ($version) = ($r->dir_config('lonVersion') =~ /^([\d\.]+)\-/); $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version,$crstype)); - my $showntablehdr = 0; - my $tablehdr = &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - '' + .&mt('There are no records to display.') + .'
' + ); + $r->print($form_footer); + return; } - if ($showntablehdr) { - $r->print(&Apache::loncommon::end_data_table().''.&mt('Previous [_1] changes',$curr{'show'}).' | '); - } - if ($more_records) { - $r->print(''.&mt('Next [_1] changes',$curr{'show'}).' | '); - } - $r->print('
'. - &mt('There are no records to display'). - '
'); - } - $r->print(''. - ''); + # Navigation Buttons + my $nav_links; + $nav_links = ''; + if (($curr{'page'} > 1) || ($more_records)) { + if ($curr{'page'} > 1) { + $nav_links .= ' '; + } + if ($more_records) { + $nav_links .= ''; + } + } + $nav_links .= '
'; + + # Table Header + my $tableheader = + &Apache::loncommon::start_data_table_header_row() + .''.&mt('After:'). - ' | '.$startform.' |
'.&mt('Before:').' | '. - $endform.' |
'.&mt('After:'). + ' | '.$startform.' |
'.&mt('Before:').' | '. + ''.$endform.' |