version 1.211, 2008/12/04 08:53:04
|
version 1.218, 2009/04/11 21:42:58
|
Line 236 sub handler {
|
Line 236 sub handler {
|
if (my ($domain,$coursenum) = |
if (my ($domain,$coursenum) = |
($envkey =~ m-^form\.cc\./($match_domain)/($match_courseid)$-)) { |
($envkey =~ m-^form\.cc\./($match_domain)/($match_courseid)$-)) { |
if ($dcroles{$domain}) { |
if ($dcroles{$domain}) { |
&check_privs($domain,$coursenum,$then,$now,'cc'); |
&Apache::lonnet::check_adhoc_privs($domain,$coursenum, |
|
$then,$now,'cc'); |
} |
} |
last; |
last; |
} |
} |
Line 276 sub handler {
|
Line 277 sub handler {
|
if ($dcroles{$domain}) { |
if ($dcroles{$domain}) { |
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
if (($server_status eq 'ok') || ($server_status eq 'switchserver')) { |
if (($server_status eq 'ok') || ($server_status eq 'switchserver')) { |
&check_privs($domain,$user,$then,$now,'ca'); |
&Apache::lonnet::check_adhoc_privs($domain,$user,$then, |
|
$now,'ca'); |
if ($server_status eq 'switchserver') { |
if ($server_status eq 'switchserver') { |
my $trolecode = 'ca./'.$domain.'/'.$user; |
my $trolecode = 'ca./'.$domain.'/'.$user; |
my $switchserver = '/adm/switchserver?' |
my $switchserver = '/adm/switchserver?' |
Line 297 sub handler {
|
Line 299 sub handler {
|
foreach $envkey (keys %env) { |
foreach $envkey (keys %env) { |
next if ($envkey!~/^user\.role\./); |
next if ($envkey!~/^user\.role\./); |
my ($where,$trolecode,$role,$tstatus,$tend,$tstart); |
my ($where,$trolecode,$role,$tstatus,$tend,$tstart); |
&role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); |
&Apache::lonnet::role_status($envkey,$then,$now,\$role,\$where, |
|
\$trolecode,\$tstatus,\$tstart,\$tend); |
if ($env{'form.'.$trolecode}) { |
if ($env{'form.'.$trolecode}) { |
if ($tstatus eq 'is') { |
if ($tstatus eq 'is') { |
$where=~s/^\///; |
$where=~s/^\///; |
Line 535 ENDENTERKEY
|
Line 538 ENDENTERKEY
|
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
|
my $brcrum =[{href=>"/admm/roles",text=>"User Roles"}]; |
my $swinfo=&Apache::lonmenu::rawconfig(); |
my $swinfo=&Apache::lonmenu::rawconfig(); |
my $start_page=&Apache::loncommon::start_page('User Roles'); |
my $start_page=&Apache::loncommon::start_page('My Roles',undef,{bread_crumbs=>$brcrum}); |
my $standby=&mt('Role selected. Please stand by.'); |
my $standby=&mt('Role selected. Please stand by.'); |
$standby=~s/\n/\\n/g; |
$standby=~s/\n/\\n/g; |
my $noscript='<span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />'; |
my $noscript='<span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />'; |
Line 645 ENDHEADER
|
Line 649 ENDHEADER
|
my $possiblerole=''; |
my $possiblerole=''; |
my %futureroles; |
my %futureroles; |
my %roles_nextlogin; |
my %roles_nextlogin; |
|
my %timezones; |
foreach $envkey (sort keys %env) { |
foreach $envkey (sort keys %env) { |
my $button = 1; |
my $button = 1; |
my $switchserver=''; |
my $switchserver=''; |
my $roletext; |
my $roletext; |
my $sortkey; |
my $sortkey; |
if ($envkey=~/^user\.role\./) { |
if ($envkey=~/^user\.role\./) { |
my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); |
my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend); |
&role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); |
&Apache::lonnet::role_status($envkey,$then,$now,\$role,\$where, |
|
\$trolecode,\$tstatus,\$tstart,\$tend); |
next if (!defined($role) || $role eq '' || $role =~ /^gr/); |
next if (!defined($role) || $role eq '' || $role =~ /^gr/); |
|
my $timezone = &role_timezone($where,\%timezones); |
$tremark=''; |
$tremark=''; |
$tpstart=' '; |
$tpstart=' '; |
$tpend=' '; |
$tpend=' '; |
$tfont='#000000'; |
|
if ($tstart) { |
if ($tstart) { |
$tpstart=&Apache::lonlocal::locallocaltime($tstart); |
$tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); |
} |
} |
if ($tend) { |
if ($tend) { |
$tpend=&Apache::lonlocal::locallocaltime($tend); |
$tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); |
} |
} |
if ($env{'request.role'} eq $trolecode) { |
if ($env{'request.role'} eq $trolecode) { |
$tstatus='selected'; |
$tstatus='selected'; |
Line 674 ENDHEADER
|
Line 680 ENDHEADER
|
|| ($tstatus eq 'future') |
|| ($tstatus eq 'future') |
|| ($env{'form.showall'})) { |
|| ($env{'form.showall'})) { |
if ($tstatus eq 'is') { |
if ($tstatus eq 'is') { |
$tbg='#77FF77'; |
$tbg='LC_roles_is'; |
$tfont='#003300'; |
|
$possiblerole=$trolecode; |
$possiblerole=$trolecode; |
$countactive++; |
$countactive++; |
} elsif ($tstatus eq 'future') { |
} elsif ($tstatus eq 'future') { |
$tbg='#FFFF77'; |
$tbg='LC_roles_future'; |
$button=0; |
$button=0; |
$futureroles{$trolecode} = $tstart.':'.$tend; |
$futureroles{$trolecode} = $tstart.':'.$tend; |
$countfuture ++; |
$countfuture ++; |
} elsif ($tstatus eq 'will') { |
} elsif ($tstatus eq 'will') { |
$tbg='#FFAA77'; |
$tbg='LC_roles_will'; |
$tremark.=&mt('Active at next login.').' '; |
$tremark.=&mt('Active at next login.').' '; |
$roles_nextlogin{$trolecode} = $tstart.':'.$tend; |
$roles_nextlogin{$trolecode} = $tstart.':'.$tend; |
$countwill ++; |
$countwill ++; |
} elsif ($tstatus eq 'expired') { |
} elsif ($tstatus eq 'expired') { |
$tbg='#FF7777'; |
$tbg='LC_roles_expired'; |
$tfont='#330000'; |
|
$button=0; |
$button=0; |
} elsif ($tstatus eq 'will_not') { |
} elsif ($tstatus eq 'will_not') { |
$tbg='#AAFF77'; |
$tbg='LC_roles_will_not'; |
$tremark.=&mt('Expired after logout.').' '; |
$tremark.=&mt('Expired after logout.').' '; |
} elsif ($tstatus eq 'selected') { |
} elsif ($tstatus eq 'selected') { |
$tbg='#11CC55'; |
$tbg='LC_roles_selected'; |
$tfont='#002200'; |
|
$inrole=1; |
$inrole=1; |
$countactive++; |
$countactive++; |
$tremark.=&mt('Currently selected.').' '; |
$tremark.=&mt('Currently selected.').' '; |
Line 760 ENDHEADER
|
Line 763 ENDHEADER
|
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; |
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; |
unless ($twhere eq &mt('Currently not available')) { |
unless ($twhere eq &mt('Currently not available')) { |
$twhere.=' <span class="LC_fontsize_small">'. |
$twhere.=' <span class="LC_fontsize_small">'. |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont). |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
'</span>'; |
'</span>'; |
} |
} |
} else { |
} else { |
Line 770 ENDHEADER
|
Line 773 ENDHEADER
|
"\0".$envkey; |
"\0".$envkey; |
$twhere=$newhash{'description'}. |
$twhere=$newhash{'description'}. |
' <span class="LC_fontsize_small">'. |
' <span class="LC_fontsize_small">'. |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont). |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
'</span>'; |
'</span>'; |
$ttype = $newhash{'type'}; |
$ttype = $newhash{'type'}; |
$trole = &Apache::lonnet::plaintext($role,$ttype); |
$trole = &Apache::lonnet::plaintext($role,$ttype); |
Line 794 ENDHEADER
|
Line 797 ENDHEADER
|
$twhere=&mt('system wide'); |
$twhere=&mt('system wide'); |
$sortkey=$role.$twhere; |
$sortkey=$role.$twhere; |
} |
} |
$roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit); |
$roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit); |
$roletext{$envkey}=$roletext; |
$roletext{$envkey}=$roletext; |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
$sortrole{$sortkey}=$envkey; |
$sortrole{$sortkey}=$envkey; |
Line 804 ENDHEADER
|
Line 807 ENDHEADER
|
} |
} |
if ($env{'user.adv'}) { |
if ($env{'user.adv'}) { |
$r->print( |
$r->print( |
'<br /><span class="LC_rolesinfo"><label>'.&mt('Show all roles').': <input type="checkbox" name="showall"'); |
'<p><label>'.&mt('Show all roles').': <input type="checkbox" name="showall"'); |
if ($env{'form.showall'}) { $r->print(' checked="checked" '); } |
if ($env{'form.showall'}) { $r->print(' checked="checked" '); } |
$r->print(' /></label><input type="submit" value="'.&mt('Display').'" /></span>'); |
$r->print(' /></label><input type="submit" value="'.&mt('Display').'" /></p>'); |
} else { |
} else { |
if ($countactive > 0) { |
if ($countactive > 0) { |
|
&queued_selfenrollment($r); |
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); |
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); |
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); |
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); |
$r->print('<p>'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','<b>','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a></b>',$domdesc).'<br />'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','<b>','</b>').'</p>'); |
$r->print('<p>'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','<b>','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a></b>',$domdesc).'<br />'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','<b>','</b>').'</p>'); |
Line 831 ENDHEADER
|
Line 835 ENDHEADER
|
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles, |
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles, |
\%roletext); |
\%roletext); |
my $tremark=''; |
my $tremark=''; |
my $tfont='#003300'; |
my $tbg; |
if ($env{'request.role'} eq 'cm') { |
if ($env{'request.role'} eq 'cm') { |
$r->print('<tr bgcolor="#11CC55">'); |
$tbg="LC_roles_selected"; |
$tremark=&mt('Currently selected.').' '; |
$tremark=&mt('Currently selected.').' '; |
$tfont='#002200'; |
|
} else { |
} else { |
$r->print('<tr bgcolor="#77FF77">'); |
$tbg="LC_roles_is"; |
} |
} |
$r->print('<td></td><td colspan="3"><span style="color:'.$tfont.';"><span class="LC_rolesinfo">'.&mt('No role specified'). |
$r->print(&Apache::loncommon::start_data_table_row() |
'</span></font></td><td><span style="color:'.$tfont.';">'.$tremark. |
.'<td class="'.$tbg.'"> </td>' |
' </font></td></tr>'."\n"); |
.'<td colspan="3">' |
|
.&mt('No role specified') |
|
.'</td>' |
|
.'<td>'.$tremark.' </td>' |
|
.&Apache::loncommon::end_data_table_row() |
|
); |
|
|
$r->print('</table>'); |
$r->print(&Apache::loncommon::end_data_table()); |
} |
} |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
Line 871 ENDHEADER
|
Line 879 ENDHEADER
|
} |
} |
} |
} |
if ($output) { |
if ($output) { |
$r->print("<tr><td align='center' colspan='5'>". |
$r->print(&Apache::loncommon::start_data_table_empty_row() |
&mt('Recent Roles')."</td></tr>"); |
.'<td align="center" colspan="5">' |
|
.&mt('Recent Roles') |
|
.'</td>' |
|
.&Apache::loncommon::end_data_table_empty_row() |
|
); |
$r->print($output); |
$r->print($output); |
$doheaders ++; |
$doheaders ++; |
} |
} |
Line 886 ENDHEADER
|
Line 898 ENDHEADER
|
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,\%roletext); |
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,\%roletext); |
if ($countactive > 1) { |
if ($countactive > 1) { |
my $tremark=''; |
my $tremark=''; |
my $tfont='#003300'; |
my $tbg; |
if ($env{'request.role'} eq 'cm') { |
if ($env{'request.role'} eq 'cm') { |
$r->print('<tr bgcolor="#11CC55">'); |
$tbg="LC_roles_selected"; |
$tremark=&mt('Currently selected.').' '; |
$tremark=&mt('Currently selected.').' '; |
$tfont='#002200'; |
|
} else { |
} else { |
$r->print('<tr bgcolor="#77FF77">'); |
$tbg="LC_roles_is"; |
} |
} |
|
$r->print(&Apache::loncommon::start_data_table_row()); |
unless ($nochoose) { |
unless ($nochoose) { |
if ($env{'request.role'} ne 'cm') { |
if ($env{'request.role'} ne 'cm') { |
$r->print('<td><input type="submit" value="'. |
$r->print('<td class="'.$tbg.'"><input type="submit" value="'. |
&mt('Select').'" name="cm" /></td>'); |
&mt('Select').'" name="cm" /></td>'); |
} else { |
} else { |
$r->print('<td> </td>'); |
$r->print('<td class="'.$tbg.'"> </td>'); |
} |
} |
} |
} |
$r->print('<td colspan="3"><span style="color:'.$tfont.';"><span class="LC_rolesinfo">'.&mt('No role specified'). |
$r->print('<td colspan="3">' |
'</span></span></td><td><span style="color:'.$tfont.';">'.$tremark. |
.&mt('No role specified') |
' </span></td></tr>'."\n"); |
.'</td>' |
|
.'<td>'.$tremark.' </td>' |
|
.&Apache::loncommon::end_data_table_row() |
|
); |
} |
} |
$r->print('</table>'); |
$r->print(&Apache::loncommon::end_data_table()); |
unless ($nochoose) { |
unless ($nochoose) { |
$r->print("</form>\n"); |
$r->print("</form>\n"); |
} |
} |
# ------------------------------------------------------------ Privileges Info |
# ------------------------------------------------------------ Privileges Info |
if (($advanced) && (($env{'user.error.msg'}) || ($error))) { |
if (($advanced) && (($env{'user.error.msg'}) || ($error))) { |
$r->print('<hr /><h2>Current Privileges</h2>'); |
$r->print('<hr /><h2>'.&mt('Current Privileges').'</h2>'); |
$r->print(&privileges_info()); |
$r->print(&privileges_info()); |
} |
} |
$r->print(&Apache::lonnet::getannounce()); |
$r->print(&Apache::lonnet::getannounce()); |
Line 930 ENDHEADER
|
Line 945 ENDHEADER
|
return OK; |
return OK; |
} |
} |
|
|
|
sub role_timezone { |
|
my ($where,$timezones) = @_; |
|
my $timezone; |
|
if (ref($timezones) eq 'HASH') { |
|
if ($where =~ m{^/($match_domain)/($match_courseid)}) { |
|
my $cdom = $1; |
|
my $cnum = $2; |
|
if ($cdom && $cnum) { |
|
if (!exists($timezones->{$cdom.'_'.$cnum})) { |
|
my %timehash = |
|
&Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); |
|
if ($timehash{'timezone'} eq '') { |
|
if (!exists($timezones->{$cdom})) { |
|
my %domdefaults = |
|
&Apache::lonnet::get_domain_defaults($cdom); |
|
if ($domdefaults{'timezone_def'} eq '') { |
|
$timezones->{$cdom} = 'local'; |
|
} else { |
|
$timezones->{$cdom} = $domdefaults{'timezone_def'}; |
|
} |
|
} |
|
$timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom}; |
|
} else { |
|
$timezones->{$cdom.'_'.$cnum} = |
|
&Apache::lonlocal::gettimezone($timehash{'timezone'}); |
|
} |
|
} |
|
$timezone = $timezones->{$cdom.'_'.$cnum}; |
|
} |
|
} else { |
|
my ($tdom) = ($where =~ m{^/($match_domain)}); |
|
if ($tdom) { |
|
if (!exists($timezones->{$tdom})) { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($tdom); |
|
if ($domdefaults{'timezone_def'} eq '') { |
|
$timezones->{$tdom} = 'local'; |
|
} else { |
|
$timezones->{$tdom} = $domdefaults{'timezone_def'}; |
|
} |
|
} |
|
$timezone = $timezones->{$tdom}; |
|
} |
|
} |
|
if ($timezone eq 'local') { |
|
$timezone = undef; |
|
} |
|
} |
|
return $timezone; |
|
} |
|
|
sub roletable_headers { |
sub roletable_headers { |
my ($r,$roleclass,$sortrole,$nochoose) = @_; |
my ($r,$roleclass,$sortrole,$nochoose) = @_; |
my $doheaders; |
my $doheaders; |
if ((ref($sortrole) eq 'HASH') && (ref($roleclass) eq 'HASH')) { |
if ((ref($sortrole) eq 'HASH') && (ref($roleclass) eq 'HASH')) { |
$r->print('<br /><table id="LC_rolesmenu"><tr>'); |
$r->print('<br />' |
|
.&Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row() |
|
); |
if (!$nochoose) { $r->print('<th> </th>'); } |
if (!$nochoose) { $r->print('<th> </th>'); } |
$r->print('<th>'.&mt('User Role').'</th><th>'.&mt('Extent') |
$r->print('<th>'.&mt('User Role').'</th>' |
.'</th><th>'.&mt('Start').'</th><th>'.&mt('End') |
.'<th>'.&mt('Extent').'</th>' |
.'</th></tr>'."\n"); |
.'<th>'.&mt('Start').'</th>' |
|
.'<th>'.&mt('End').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row() |
|
); |
$doheaders=-1; |
$doheaders=-1; |
my @roletypes = &roletypes(); |
my @roletypes = &roletypes(); |
foreach my $type (@roletypes) { |
foreach my $type (@roletypes) { |
Line 981 sub print_rolerows {
|
Line 1052 sub print_rolerows {
|
} |
} |
if ($output) { |
if ($output) { |
if ($doheaders > 0) { |
if ($doheaders > 0) { |
$r->print("<tr>". |
$r->print(&Apache::loncommon::start_data_table_empty_row() |
"<td align='center' colspan='5'>". |
.'<td align="center" colspan="5">' |
&mt($type)."</td></tr>"); |
.&mt($type) |
|
.'</td>' |
|
.&Apache::loncommon::end_data_table_empty_row() |
|
); |
} |
} |
$r->print($output); |
$r->print($output); |
} |
} |
Line 1009 sub findcourse_advice {
|
Line 1083 sub findcourse_advice {
|
} |
} |
$r->print('<p>'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a>',$domdesc).'<br />'); |
$r->print('<p>'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a>',$domdesc).'<br />'); |
$r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'</p>'); |
$r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'</p>'); |
|
&queued_selfenrollment($r); |
|
return; |
|
} |
|
|
|
sub queued_selfenrollment { |
|
my ($r) = @_; |
|
my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests'); |
|
my %reqs_by_date; |
|
foreach my $item (keys(%selfenrollrequests)) { |
|
if (ref($selfenrollrequests{$item}) eq 'HASH') { |
|
if ($selfenrollrequests{$item}{'status'} eq 'request') { |
|
if ($selfenrollrequests{$item}{'timestamp'}) { |
|
push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item); |
|
} |
|
} |
|
} |
|
} |
|
if (keys(%reqs_by_date)) { |
|
my $rolename = &Apache::lonnet::plaintext('st'); |
|
$r->print('<b>'.&mt('Enrollment requests pending Course Coordinator approval').'</b><br />'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Date requested').'</th><th>'.&mt('Course title').'</th>'. |
|
'<th>'.&mt('User role').'</th><th>'.&mt('Section').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()); |
|
my @sorted = sort { $a <=> $b } (keys(%reqs_by_date)); |
|
foreach my $item (@sorted) { |
|
if (ref($reqs_by_date{$item}) eq 'ARRAY') { |
|
foreach my $crs (@{$reqs_by_date{$item}}) { |
|
my %courseinfo = &Apache::lonnet::coursedescription($crs); |
|
my $usec = $selfenrollrequests{$crs}{'section'}; |
|
if ($usec eq '') { |
|
$usec = &mt('No section'); |
|
} |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td>'.&Apache::lonlocal::locallocaltime($item).'</td>'. |
|
'<td>'.$courseinfo{'description'}.'</td>'. |
|
'<td>'.$rolename.'</td><td>'.$usec.'</td>'. |
|
&Apache::loncommon::end_data_table_row()); |
|
} |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
return; |
return; |
} |
} |
|
|
Line 1067 sub privileges_info {
|
Line 1185 sub privileges_info {
|
return $output; |
return $output; |
} |
} |
|
|
sub role_status { |
|
my ($rolekey,$then,$now,$role,$where,$trolecode,$tstatus,$tstart,$tend) = @_; |
|
my @pwhere = (); |
|
if (exists($env{$rolekey}) && $env{$rolekey} ne '') { |
|
(undef,undef,$$role,@pwhere)=split(/\./,$rolekey); |
|
unless (!defined($$role) || $$role eq '') { |
|
$$where=join('.',@pwhere); |
|
$$trolecode=$$role.'.'.$$where; |
|
($$tstart,$$tend)=split(/\./,$env{$rolekey}); |
|
$$tstatus='is'; |
|
if ($$tstart && $$tstart>$then) { |
|
$$tstatus='future'; |
|
if ($$tstart<$now) { $$tstatus='will'; } |
|
} |
|
if ($$tend) { |
|
if ($$tend<$then) { |
|
$$tstatus='expired'; |
|
} elsif ($$tend<$now) { |
|
$$tstatus='will_not'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
sub build_roletext { |
sub build_roletext { |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit) = @_; |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit) = @_; |
my $roletext='<tr bgcolor="'.$tbg.'" class="LC_rolesmenu_'.$tstatus.'">'; |
my $roletext=&Apache::loncommon::start_data_table_row(); |
my $is_dc=($trolecode =~ m/^dc\./); |
my $is_dc=($trolecode =~ m/^dc\./); |
my $rowspan=($is_dc) ? '' |
my $rowspan=($is_dc) ? '' |
: ' rowspan="2" '; |
: ' rowspan="2" '; |
Line 1104 sub build_roletext {
|
Line 1197 sub build_roletext {
|
$buttonname=~s/\W//g; |
$buttonname=~s/\W//g; |
if (!$button) { |
if (!$button) { |
if ($switchserver) { |
if ($switchserver) { |
$roletext.='<td'.$rowspan.'><span class="LC_rolesinfo"><a href="/adm/switchserver?'. |
$roletext.='<td'.$rowspan.' class="'.$tbg.'">' |
$switchserver.'">'.&mt('Switch Server').'</a></span></td>'; |
.'<a href="/adm/switchserver?'.$switchserver.'">' |
|
.&mt('Switch Server') |
|
.'</a></td>'; |
} else { |
} else { |
$roletext.=('<td'.$rowspan.'> </td>'); |
$roletext.=('<td'.$rowspan.' class="'.$tbg.'"> </td>'); |
} |
} |
} elsif ($tstatus eq 'is') { |
} elsif ($tstatus eq 'is') { |
$roletext.='<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
$roletext.='<td'.$rowspan.' class="'.$tbg.'">'. |
|
'<input name="'.$buttonname.'" type="button" value="'. |
&mt('Select').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Select').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} elsif ($tryagain) { |
} elsif ($tryagain) { |
$roletext.= |
$roletext.= |
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
'<td'.$rowspan.' class="'.$tbg.'">'. |
|
'<input name="'.$buttonname.'" type="button" value="'. |
&mt('Try Selecting Again').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Try Selecting Again').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} elsif ($advanced) { |
} elsif ($advanced) { |
$roletext.= |
$roletext.= |
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
'<td'.$rowspan.' class="'.$tbg.'">'. |
|
'<input name="'.$buttonname.'" type="button" value="'. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} elsif ($reinit) { |
} elsif ($reinit) { |
$roletext.= |
$roletext.= |
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
'<td'.$rowspan.' class="'.$tbg.'">'. |
|
'<input name="'.$buttonname.'" type="button" value="'. |
&mt('Re-Select').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Re-Select').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} else { |
} else { |
$roletext.= |
$roletext.= |
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
'<td'.$rowspan.' class="'.$tbg.'">'. |
|
'<input name="'.$buttonname.'" type="button" value="'. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} |
} |
Line 1139 sub build_roletext {
|
Line 1239 sub build_roletext {
|
$tremark.=&Apache::lonannounce::showday(time,1, |
$tremark.=&Apache::lonannounce::showday(time,1, |
&Apache::lonannounce::readcalendar($tdom.'_'.$trest)); |
&Apache::lonannounce::readcalendar($tdom.'_'.$trest)); |
} |
} |
$roletext.='<td><span style="color:'.$tfont.';">'.$trole. |
$roletext.='<td>'.$trole.'</td>' |
'</span></td><td><span style="color:'.$tfont.';">'.$twhere. |
.'<td>'.$twhere.'</td>' |
'</span></td><td><span style="color:'.$tfont.';">'.$tpstart. |
.'<td>'.$tpstart.'</td>' |
'</span></td><td><span style="color:'.$tfont.';">'.$tpend. |
.'<td>'.$tpend.'</td>' |
'</span></td></tr>'; |
.&Apache::loncommon::end_data_table_row(); |
if (!$is_dc) { |
if (!$is_dc) { |
$roletext.='<tr bgcolor="'.$tbg.'"><td colspan="4"><span style="color:'.$tfont.';"><span class="LC_rolesinfo">'.$tremark. |
$roletext.=&Apache::loncommon::continue_data_table_row() |
'</span> </span></td></tr><tr><td colspan="5" height="3"></td></tr>'."\n"; |
.'<td colspan="4">' |
|
.$tremark.' ' |
|
.'</td>' |
|
.&Apache::loncommon::end_data_table_row(); |
} |
} |
return $roletext; |
return $roletext; |
} |
} |
Line 1186 sub check_author_homeserver {
|
Line 1289 sub check_author_homeserver {
|
} |
} |
} |
} |
|
|
sub check_privs { |
|
my ($cdom,$cnum,$then,$now,$checkrole) = @_; |
|
my $cckey = 'user.role.'.$checkrole.'./'.$cdom.'/'.$cnum; |
|
if ($env{$cckey}) { |
|
my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); |
|
&role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); |
|
unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { |
|
&set_privileges($cdom,$cnum,$checkrole); |
|
} |
|
} else { |
|
&set_privileges($cdom,$cnum,$checkrole); |
|
} |
|
} |
|
|
|
sub check_fordc { |
sub check_fordc { |
my ($dcroles,$then) = @_; |
my ($dcroles,$then) = @_; |
my $numdc = 0; |
my $numdc = 0; |
Line 1363 sub display_cc_role {
|
Line 1452 sub display_cc_role {
|
my $trolecode = 'cc./'.$1.'/'.$2; |
my $trolecode = 'cc./'.$1.'/'.$2; |
my $twhere; |
my $twhere; |
my $ttype; |
my $ttype; |
my $tbg='#77FF77'; |
my $tbg='LC_roles_is'; |
my $tfont='#003300'; |
|
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
if (%newhash) { |
if (%newhash) { |
$twhere=$newhash{'description'}. |
$twhere=$newhash{'description'}. |
' <span style="LC_fontsize_small">'. |
' <span style="LC_fontsize_small">'. |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont). |
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1). |
'</span>'; |
'</span>'; |
$ttype = $newhash{'type'}; |
$ttype = $newhash{'type'}; |
} else { |
} else { |
Line 1378 sub display_cc_role {
|
Line 1466 sub display_cc_role {
|
} |
} |
my $trole = &Apache::lonnet::plaintext('cc',$ttype); |
my $trole = &Apache::lonnet::plaintext('cc',$ttype); |
$twhere.="<br />".&mt('Domain').":".$1; |
$twhere.="<br />".&mt('Domain').":".$1; |
$roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,$twhere,'','','',1,''); |
$roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); |
} |
} |
} |
} |
return ($roletext); |
return ($roletext); |
Line 1386 sub display_cc_role {
|
Line 1474 sub display_cc_role {
|
|
|
sub adhoc_roles_row { |
sub adhoc_roles_row { |
my ($dcdom,$rowtype) = @_; |
my ($dcdom,$rowtype) = @_; |
my $output = '<tr bgcolor="#77FF77">'. |
my $output = &Apache::loncommon::continue_data_table_row() |
' <td colspan="5"><table><tr><td><span class="LC_rolesinfo">' |
.' <td colspan="5">' |
.&mt('[_1]Ad hoc[_2] roles in domain [_3] --', |
.'<table><tr><td>' |
'<span class="LC_cusr_emph">','</span>',$dcdom).'</span></td><td>'; |
.&mt('[_1]Ad hoc[_2] roles in domain [_3] --' |
|
,'<span class="LC_cusr_emph">','</span>',$dcdom) |
|
.'</td>' |
|
.'<td>'; |
my $selectcclink = &courselink($dcdom,$rowtype); |
my $selectcclink = &courselink($dcdom,$rowtype); |
my $ccrole = &Apache::lonnet::plaintext('cc'); |
my $ccrole = &Apache::lonnet::plaintext('cc'); |
my $carole = &Apache::lonnet::plaintext('ca'); |
my $carole = &Apache::lonnet::plaintext('ca'); |
my $selectcalink = &coauthorlink($dcdom,$rowtype); |
my $selectcalink = &coauthorlink($dcdom,$rowtype); |
$output.= '<span class="LC_rolesinfo">'. |
$output.=&mt('[_1]: [_2]',$ccrole,$selectcclink) |
&mt('[_1]: [_2]',$ccrole,$selectcclink). |
.'<br /></td>' |
'</span><br /></td><td> </td><td><span class="LC_rolesinfo">'. |
.'<td> </td>' |
&mt('[_1]: [_2]',$carole,$selectcalink). |
.'<td>'.&mt('[_1]: [_2]',$carole,$selectcalink).'<br /></td>' |
'</span><br /></td></tr></table></td></tr>'. |
.'</tr></table>' |
'<tr><td colspan="5" height="3"></td></tr>'."\n"; |
.'</td>' |
|
.&Apache::loncommon::end_data_table_row(); |
return $output; |
return $output; |
} |
} |
|
|
Line 1408 sub recent_filename {
|
Line 1500 sub recent_filename {
|
return 'nohist_recent_'.&escape($area); |
return 'nohist_recent_'.&escape($area); |
} |
} |
|
|
sub set_privileges { |
|
# role can be cc or ca |
|
my ($dcdom,$pickedcourse,$role) = @_; |
|
my $area = '/'.$dcdom.'/'.$pickedcourse; |
|
my $spec = $role.'.'.$area; |
|
my %userroles = &Apache::lonnet::set_arearole($role,$area,'','', |
|
$env{'user.domain'}, |
|
$env{'user.name'}); |
|
my %ccrole = (); |
|
&Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area); |
|
my ($author,$adv)= &Apache::lonnet::set_userprivs(\%userroles,\%ccrole); |
|
&Apache::lonnet::appenv(\%userroles,[$role,'cm']); |
|
|
|
&Apache::lonnet::log($env{'user.domain'}, |
|
$env{'user.name'}, |
|
$env{'user.home'}, |
|
"Role ".$role); |
|
&Apache::lonnet::appenv( |
|
{'request.role' => $spec, |
|
'request.role.domain' => $dcdom, |
|
'request.course.sec' => ''}); |
|
my $tadv=0; |
|
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } |
|
&Apache::lonnet::appenv({'request.role.adv' => $tadv}); |
|
} |
|
|
|
sub courseloadpage { |
sub courseloadpage { |
my ($courseid) = @_; |
my ($courseid) = @_; |
my $startpage; |
my $startpage; |