--- loncom/interface/loncommon.pm 2006/07/19 10:58:31 1.433
+++ loncom/interface/loncommon.pm 2006/08/11 21:55:19 1.443
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.433 2006/07/19 10:58:31 albertel Exp $
+# $Id: loncommon.pm,v 1.443 2006/08/11 21:55:19 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -285,7 +285,7 @@ sub browser_and_searcher_javascript {
}
url += 'element=' + elementname + '';
var title = 'Browser';
- var options = 'scrollbars=1,resizable=1,menubar=1,location=1';
+ var options = 'scrollbars=1,resizable=1,menubar=0,toolbar=1,location=1';
options += ',width=700,height=600';
editbrowser = open(url,title,options,'1');
editbrowser.focus();
@@ -306,7 +306,7 @@ sub browser_and_searcher_javascript {
}
url += 'element=' + elementname + '';
var title = 'Search';
- var options = 'scrollbars=1,resizable=1,menubar=0';
+ var options = 'scrollbars=1,resizable=1,menubar=0,toolbar=1,location=1';
options += ',width=700,height=600';
editsearcher = open(url,title,options,'1');
editsearcher.focus();
@@ -672,14 +672,14 @@ sub help_open_topic {
{
$template .=
"
".
- "$text";
+ " | $text";
}
# Add the graphic
my $title = &mt('Online Help');
my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif");
$template .= <<"ENDTEMPLATE";
-
+
ENDTEMPLATE
if ($text ne '') { $template.=' |
' };
return $template;
@@ -766,29 +766,35 @@ sub help_open_menu {
sub top_nav_help {
my ($text) = @_;
- my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height);
-
- $text = "" if (not defined $text);
- $stayOnPage = 0 if (not defined $stayOnPage);
- if ($env{'browser.interface'} eq 'textual' ||
- $env{'environment.remote'} eq 'off' ) {
- $stayOnPage=1;
- }
- $width = 620 if (not defined $width);
- $height = 600 if (not defined $height);
- my $link='';
+ $text = &mt($text);
+
+ my $stayOnPage =
+ ($env{'browser.interface'} eq 'textual' ||
+ $env{'environment.remote'} eq 'off' );
+ my $link= ($stayOnPage) ? "javascript:helpMenu('display')"
+ : "javascript:helpMenu('open')";
+ my $banner_link = &update_help_link(undef,undef,undef,undef,$stayOnPage);
+
my $title = &mt('Get help');
- if ($stayOnPage) {
- $link = "javascript:helpMenu('display')";
- } else {
- $link = "javascript:helpMenu('open')";
- }
+
+ return <<"END";
+$banner_link
+ $text
+END
+}
+
+sub help_menu_js {
+ my ($text) = @_;
+
+ my $stayOnPage =
+ ($env{'browser.interface'} eq 'textual' ||
+ $env{'environment.remote'} eq 'off' );
+
+ my $width = 620;
+ my $height = 600;
my $helptopic=&general_help();
- my $banner_link = &update_help_link($topic,$component_help,$faq,$bug,$stayOnPage);
my $details_link = '/adm/help/'.$helptopic.'.hlp';
- my $template;
my $nothing=&Apache::lonhtmlcommon::javascript_nothing();
- my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");
my $start_page =
&Apache::loncommon::start_page('Help Menu', undef,
{'frameset' => 1,
@@ -800,8 +806,8 @@ sub top_nav_help {
&Apache::loncommon::end_page({'frameset' => 1,
'js_ready' => 1,});
- $template .= <<"ENDTEMPLATE";
-
-$banner_link
- $text
+
ENDTEMPLATE
return $template;
}
@@ -868,14 +872,14 @@ sub help_open_bug {
{
$template .=
"".
- "$text";
+ " | $text";
}
# Add the graphic
my $title = &mt('Report a Bug');
my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif");
$template .= <<"ENDTEMPLATE";
-
+
ENDTEMPLATE
if ($text ne '') { $template.=' |
' };
return $template;
@@ -913,14 +917,14 @@ sub help_open_faq {
{
$template .=
"".
- "$text";
+ " | $text";
}
# Add the graphic
my $title = &mt('View the FAQ');
my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif");
$template .= <<"ENDTEMPLATE";
-
+
ENDTEMPLATE
if ($text ne '') { $template.=' |
' };
return $template;
@@ -2088,9 +2092,9 @@ sub screenname {
sub messagewrapper {
my ($link,$username,$domain,$subject,$text)=@_;
return
- ''.$link.'';
}
# --------------------------------------------------------------- Notes Wrapper
@@ -2871,7 +2875,7 @@ sub bodytag {
'alink' => &designparm($function.'.alink',$domain),
'vlink' => &designparm($function.'.vlink',$domain),
'link' => &designparm($function.'.link',$domain),);
- @$addentries{keys(%design)} = @design{keys(%design)};
+ @design{keys(%$addentries)} = @$addentries{keys(%$addentries)};
# role and realm
my ($role,$realm) = split(/\./,$env{'request.role'},2);
@@ -2896,7 +2900,7 @@ sub bodytag {
my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
- my $extra_body_attr = &make_attr_string($forcereg,$addentries);
+ my $extra_body_attr = &make_attr_string($forcereg,\%design);
# construct main body tag
my $bodytag = "".
@@ -2919,6 +2923,8 @@ sub bodytag {
my $name = &plainname($env{'user.name'},$env{'user.domain'});
if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
undef($role);
+ } else {
+ $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
}
my $roleinfo=(<{'force_register'}) {
$result .= &Apache::lonmenu::registerurl(1);
}
+ if (!$args->{'no_nav_bar'}
+ && !$args->{'only_body'}
+ && !$args->{'frameset'}) {
+ $result .= &help_menu_js();
+ }
if (ref($args->{'redirect'})) {
my ($time,$url,$inhibit_continue) = @{$args->{'redirect'}};
@@ -3860,7 +3885,7 @@ sub start_page {
#&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
my %head_args;
foreach my $arg ('redirect','force_register','domain','function',
- 'bgcolor') {
+ 'bgcolor','frameset','no_nav_bar','only_body') {
if (defined($args->{$arg})) {
$head_args{$arg} = $args->{$arg};
}
@@ -4331,13 +4356,20 @@ sub get_course_users {
}
}
if ((@{$roles} > 1) || ((@{$roles} == 1) && ($$roles[0] ne "st"))) {
- my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$cdom,$cnum);
- foreach my $person (@coursepersonnel) {
+ my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
+ my $now = time;
+ foreach my $person (sort(keys(%coursepersonnel))) {
my $match = 0;
my $secmatch = 0;
+ my $status;
my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/);
$user =~ s/:$//;
- if (($role) && (grep(/^\Q$role\E$/,@{$roles}))) {
+ my ($end,$start) = split(/:/,$coursepersonnel{$person});
+ if ($end == -1 || $start == -1) {
+ next;
+ }
+ if (($role) && ((grep(/^\Q$role\E$/,@{$roles})) ||
+ (grep(/^cr$/,@{$roles}) && $role =~ /^cr\//))) {
my ($uname,$udom) = split(/:/,$user);
if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {
if (grep(/^all$/,@{$sections})) {
@@ -4359,8 +4391,13 @@ sub get_course_users {
$usec = 'none';
}
if ($uname ne '' && $udom ne '') {
- my $status = &check_user_status($udom,$uname,$cdom,$cnum,$role,
- $usec);
+ if ($end < $now) {
+ $status = 'previous';
+ } elsif ($start > $now) {
+ $status = 'future';
+ } else {
+ $status = 'active';
+ }
foreach my $type (keys(%{$types})) {
if ($status eq $type) {
if (!grep(/^\Q$type\E$/,@{$$users{$role}{$user}})) {
@@ -4385,7 +4422,10 @@ sub get_course_users {
my %csettings = &Apache::lonnet::get('environment',['internal.courseowner'],$cdom,$cnum);
if ( defined($csettings{'internal.courseowner'}) ) {
my $owner = $csettings{'internal.courseowner'};
- @{$$users{'ow'}{$owner.':'.$cdom}} = 'any';
+ if ($owner !~ /^[^:]+:[^:]+$/) {
+ $owner = $owner.':'.$cdom;
+ }
+ @{$$users{'ow'}{$owner}} = 'any';
if (defined($userdata) &&
!exists($$userdata{$owner.':'.$cdom})) {
&get_user_info($cdom,$owner,\%idx,$userdata);
@@ -5463,6 +5503,92 @@ sub restore_course_settings {
}
############################################################
+############################################################
+
+sub commit_customrole {
+ my ($udom,$uname,$url,$three,$four,$five,$start,$end) = @_;
+ my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url.
+ ($start?', '.&mt('starting').' '.localtime($start):'').
+ ($end?', ending '.localtime($end):'').': '.
+ &Apache::lonnet::assigncustomrole(
+ $udom,$uname,$url,$three,$four,$five,$end,$start).
+ '
';
+ return $output;
+}
+
+sub commit_standardrole {
+ my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
+ my $output;
+ my $logmsg;
+ if ($three eq 'st') {
+ my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec);
+ if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {
+ $output = "Error: $result\n";
+ } else {
+ $output = &mt('Assigning').' '.$three.' in '.$url.
+ ($start?', '.&mt('starting').' '.localtime($start):'').
+ ($end?', '.&mt('ending').' '.localtime($end):'').
+ ': '.$result.'
'.
+ &mt('Add to classlist').': ok
';
+ }
+ } else {
+ $output = &mt('Assigning').' '.$three.' in '.$url.
+ ($start?', '.&mt('starting').' '.localtime($start):'').
+ ($end?', '.&mt('ending').' '.localtime($end):'').': '.
+ &Apache::lonnet::assignrole(
+ $udom,$uname,$url,$three,$end,$start).
+ '
';
+ }
+ return $output;
+}
+
+sub commit_studentrole {
+ my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
+ my $linefeed = '
'."\n";
+ my $result;
+ if (defined($one) && defined($two)) {
+ my $cid=$one.'_'.$two;
+ my $oldsec=&Apache::lonnet::getsection($udom,$uname,$cid);
+ my $secchange = 0;
+ my $expire_role_result;
+ my $modify_section_result;
+ unless ($oldsec eq '-1') {
+ unless ($sec eq $oldsec) {
+ $secchange = 1;
+ my $uurl='/'.$cid;
+ $uurl=~s/\_/\//g;
+ if ($oldsec) {
+ $uurl.='/'.$oldsec;
+ }
+ $expire_role_result = &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',time);
+ $result = $expire_role_result;
+ }
+ }
+ if (($expire_role_result eq 'ok') || ($secchange == 0)) {
+ $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid);
+ if ($modify_section_result =~ /^ok/) {
+ if ($secchange == 1) {
+ $$logmsg .= "Section for $uname switched from old section: $oldsec to new section: $sec".$linefeed;
+ } elsif ($oldsec eq '-1') {
+ $$logmsg .= "New student role for $uname in section $sec in course $cid".$linefeed;
+ } else {
+ $$logmsg .= "Student $uname assigned to unchanged section $sec in course $cid".$linefeed;
+ }
+ } else {
+ $$logmsg .= "Error when attempting section change for $uname from old section $oldsec to new section: $sec in course $cid -error: $modify_section_result".$linefeed;
+ }
+ $result = $modify_section_result;
+ } elsif ($secchange == 1) {
+ $$logmsg .= "Error when attempting to expire role for $uname in old section $oldsec in course $cid -error: $expire_role_result".$linefeed;
+ }
+ } else {
+ $$logmsg .= "Incomplete course id defined. Addition of user $uname from domain $udom to course $one\_$two, section $sec not completed.$linefeed";
+ $result = "error: incomplete course id\n";
+ }
+ return $result;
+}
+
+############################################################
############################################################
sub course_type {