version 1.5, 2003/03/20 20:58:40
|
version 1.20, 2006/11/09 22:48:50
|
Line 32 package Apache::lonrights;
|
Line 32 package Apache::lonrights;
|
|
|
use strict; |
use strict; |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonnet(); |
use Apache::lonnet; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use HTML::LCParser; |
use HTML::LCParser; |
use Apache::File; |
use Apache::File; |
|
use Apache::lonlocal; |
|
|
sub handler { |
sub handler { |
|
|
my $r=shift; |
my $r=shift; |
$r->content_type('text/html'); |
my $target = $env{'form.grade_target'}; |
|
if ($target eq 'meta') { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
|
$env{'request.uri'}=$r->uri; |
|
my $file = &Apache::lonnet::filelocation("",$r->uri); |
|
my $content=&Apache::lonnet::getfile($file); |
|
my $result=&Apache::lonxml::xmlparse(undef,'meta',$content); |
|
$r->print($result); |
|
return OK; |
|
} |
|
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
$r->print( |
my $js = &Apache::loncommon::coursebrowser_javascript(); |
'<html><head><title>LON-CAPA Custom Distribution Rights</title></head>'); |
|
|
|
$r->print(&Apache::loncommon::bodytag('Custom Distribution Rights')); |
$r->print(&Apache::loncommon::start_page('Custom Distribution Rights',$js)); |
$r->rflush(); |
$r->rflush(); |
|
|
my $uri=$r->uri; |
my $uri=$r->uri; |
Line 56 sub handler {
|
Line 67 sub handler {
|
|
|
# ============================================================ Modify and store |
# ============================================================ Modify and store |
if ($constructmode) { |
if ($constructmode) { |
if ($ENV{'form.store'}) { |
if ($env{'form.store'}) { |
my @newrules=(); |
my @newrules=(); |
undef @newrules; |
undef @newrules; |
# read rules from form |
# read rules from form |
foreach (keys %ENV) { |
foreach (keys %env) { |
if ($_=~/^form\.effect\_(\d+)$/) { |
if ($_=~/^form\.effect\_(\d+)$/) { |
my $number=$1; |
my $number=$1; |
my %rulehash=(); |
my %rulehash=(); |
foreach ('effect','domain','course','section','role') { |
foreach ('effect','domain','course','section','role') { |
$rulehash{$_}=$ENV{'form.'.$_.'_'.$number}; |
$rulehash{$_}=$env{'form.'.$_.'_'.$number}; |
} |
} |
if ($rulehash{'role'} eq 'au') { |
if ($rulehash{'role'} eq 'au') { |
$rulehash{'course'}=''; |
$rulehash{'course'}=''; |
Line 82 sub handler {
|
Line 93 sub handler {
|
$rulehash{'course'}=~s/\W//g; |
$rulehash{'course'}=~s/\W//g; |
$rulehash{'section'}=~s/\W//g; |
$rulehash{'section'}=~s/\W//g; |
unless ($rulehash{'domain'}) { |
unless ($rulehash{'domain'}) { |
$rulehash{'domain'}=$ENV{'user.domain'}; |
$rulehash{'domain'}=$env{'user.domain'}; |
} |
} |
my $realm=''; |
my $realm=''; |
if ($number) { |
if ($number) { |
Line 99 sub handler {
|
Line 110 sub handler {
|
} |
} |
} |
} |
# edit actions? |
# edit actions? |
|
foreach (keys %env) { |
|
if ($_=~/^form\.action\_(\d+)$/) { |
|
my $number=$1; |
|
if ($env{$_} eq 'delete') { $newrules[$number]=''; } |
|
if (($env{$_} eq 'moveup') && ($number>1)) { |
|
my $buffer=$newrules[$number]; |
|
$newrules[$number]=$newrules[$number-1]; |
|
$newrules[$number-1]=$buffer; |
|
} |
|
if (($env{$_} eq 'movedown') && ($number<$#newrules)) { |
|
my $buffer=$newrules[$number]; |
|
$newrules[$number]=$newrules[$number+1]; |
|
$newrules[$number+1]=$buffer; |
|
} |
|
if ($env{$_} eq 'insertabove') { |
|
for (my $i=$#newrules;$i>=$number;$i--) { |
|
$newrules[$i+1]=$newrules[$i]; |
|
} |
|
$newrules[$number]='deny'; |
|
} |
|
if ($env{$_} eq 'insertbelow') { |
|
for (my $i=$#newrules;$i>$number;$i--) { |
|
$newrules[$i+1]=$newrules[$i]; |
|
} |
|
$newrules[$number+1]='deny'; |
|
} |
|
} |
|
} |
|
|
# store file |
# store file |
my $fh=Apache::File->new('>'.$fn); |
my $fh=Apache::File->new('>'.$fn); |
Line 124 sub handler {
|
Line 163 sub handler {
|
$contents=join('',<$fh>); |
$contents=join('',<$fh>); |
$fh->close(); |
$fh->close(); |
} |
} |
$r->print('<form method="post">'); |
$r->print('<form name="rules" method="post">'); |
} |
} |
unless ($contents=~/\<accessrule/s) { |
unless ($contents=~/\<accessrule/s) { |
$contents='<accessrule effect="deny" />'; |
$contents='<accessrule effect="deny" />'; |
Line 132 sub handler {
|
Line 171 sub handler {
|
my $parser=HTML::LCParser->new(\$contents); |
my $parser=HTML::LCParser->new(\$contents); |
my $token; |
my $token; |
my $rulecounter=0; |
my $rulecounter=0; |
my $colzero=($constructmode?'Edit action':'Rule'); |
my $colzero=&mt($constructmode?'Edit action':'Rule'); |
|
my %lt=&Apache::lonlocal::texthash('ef' => 'Effect', |
|
'do' => 'Domain', |
|
'co' => 'Course', |
|
'se' => 'Section', |
|
'ro' => 'Role'); |
# ---------------------------------------------------------- Start table output |
# ---------------------------------------------------------- Start table output |
$r->print(<<ENDSTARTTABLE); |
$r->print(<<ENDSTARTTABLE); |
<table border="2"> |
<table border="2"> |
<tr><th>$colzero</th><th>Effect</th><th>Domain</th><th>Course</th> |
<tr><th>$colzero</th><th>$lt{'ef'}</th><th>$lt{'do'}</th><th>$lt{'co'}</th> |
<th>Section</th><th>Role</th></tr> |
<th>$lt{'se'}</th><th>$lt{'ro'}</th></tr> |
ENDSTARTTABLE |
ENDSTARTTABLE |
# --------------------------------------------------------------------- Default |
# --------------------------------------------------------------------- Default |
# Fast forward to first rule |
# Fast forward to first rule |
$token=$parser->get_token; |
$token=$parser->get_token; |
while ($token->[1] ne 'accessrule') { $token=$parser->get_token; } |
while ($token->[1] ne 'accessrule') { $token=$parser->get_token; } |
# print default |
# print default |
$r->print('<tr><td> </td><td>'); |
$r->print('<tr><td align="right">'); |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::select_form('','action_0', |
|
('' => '', |
|
'insertbelow' => 'Insert rule below '))); |
|
|
|
} else { |
|
$r->print(' '); |
|
} |
|
$r->print('</td><td>'); |
if ($constructmode) { |
if ($constructmode) { |
$r->print(&Apache::loncommon::select_form |
$r->print(&Apache::loncommon::select_form |
($token->[2]->{'effect'},'effect_0', |
($token->[2]->{'effect'},'effect_0', |
Line 155 ENDSTARTTABLE
|
Line 208 ENDSTARTTABLE
|
} |
} |
$r->print('</td><td colspan="4">Default'); |
$r->print('</td><td colspan="4">Default'); |
if (($token->[2]->{'realm'}) || ($token->[2]->{'role'})) { |
if (($token->[2]->{'realm'}) || ($token->[2]->{'role'})) { |
$r->print(' - <font color="red">Error! No default set.</font>'); |
$r->print(' - <font color="red">'.&mt('Error! No default set.'). |
|
'</font>'); |
} |
} |
$r->print('</td></tr>'); |
$r->print('</td></tr>'); |
# Additional roles |
# Additional roles |
while ($token=$parser->get_token) { |
while ($token=$parser->get_token) { |
if (($token->[0] eq 'S') && ($token->[1] eq 'accessrule')) { |
if (($token->[0] eq 'S') && ($token->[1] eq 'accessrule')) { |
$rulecounter++; |
$rulecounter++; |
$r->print('<tr><td>'); |
$r->print('<tr><td align="right" rowspan="2">'); |
# insert, delete, etc |
# insert, delete, etc |
$r->print($rulecounter.'. '); |
$r->print($rulecounter.'. '); |
if ($constructmode) { |
if ($constructmode) { |
Line 171 ENDSTARTTABLE
|
Line 225 ENDSTARTTABLE
|
('' => '', |
('' => '', |
'delete' => 'Delete this rule', |
'delete' => 'Delete this rule', |
'insertabove' => 'Insert rule above', |
'insertabove' => 'Insert rule above', |
'insertbelow' => 'Insert rule below', |
'insertbelow' => 'Insert rule below ', |
'moveup' => 'Move rule up', |
'moveup' => 'Move rule up', |
'movedown' => 'Move rule down'))); |
'movedown' => 'Move rule down'))); |
} |
} |
$r->print('</td><td>'); |
$r->print('</td><td rowspan="2">'); |
# effect |
# effect |
if ($constructmode) { |
if ($constructmode) { |
$r->print(&Apache::loncommon::select_form |
$r->print(&Apache::loncommon::select_form |
Line 191 ENDSTARTTABLE
|
Line 245 ENDSTARTTABLE
|
my $realm=$token->[2]->{'realm'}; |
my $realm=$token->[2]->{'realm'}; |
$realm=~s/^\W//; |
$realm=~s/^\W//; |
my ($rdom,$rcourse,$rsec)=split(/[\/\_]/,$realm); |
my ($rdom,$rcourse,$rsec)=split(/[\/\_]/,$realm); |
# realm role |
# realm domain |
if ($constructmode) { |
if ($constructmode) { |
|
unless ($rdom) { $rdom=$env{'user.domain'}; } |
$r->print(&Apache::loncommon::select_dom_form($rdom, |
$r->print(&Apache::loncommon::select_dom_form($rdom, |
'domain_'.$rulecounter)); |
'domain_'.$rulecounter)); |
} else { |
} else { |
Line 216 ENDSTARTTABLE
|
Line 271 ENDSTARTTABLE
|
$r->print($rsec); |
$r->print($rsec); |
} |
} |
|
|
$r->print('</td><td>'); |
$r->print('</td><td rowspan="2">'); |
# role |
# role |
if ($constructmode) { |
if ($constructmode) { |
my %hash=('' => ''); |
my %hash=('' => ''); |
Line 230 ENDSTARTTABLE
|
Line 285 ENDSTARTTABLE
|
} else { |
} else { |
$r->print(&Apache::lonnet::plaintext($token->[2]->{'role'})); |
$r->print(&Apache::lonnet::plaintext($token->[2]->{'role'})); |
} |
} |
|
# course selection link |
|
$r->print('</td></tr><tr><td colspan="3" align="right">'); |
|
if ($rcourse) { |
|
my %descript= |
|
&Apache::lonnet::coursedescription($rdom.'_'.$rcourse, |
|
{'one_time' => 1}); |
|
$r->print($descript{'description'}.' '); |
|
} |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::selectcourse_link('rules', |
|
'course_'.$rulecounter,'domain_'.$rulecounter)); |
|
} |
# close row |
# close row |
$r->print('</td></tr>'); |
$r->print('</td></tr>'); |
} |
} |
Line 237 ENDSTARTTABLE
|
Line 304 ENDSTARTTABLE
|
$r->print('</table>'); |
$r->print('</table>'); |
# ------------------------------------------------------------ End table output |
# ------------------------------------------------------------ End table output |
if ($constructmode) { |
if ($constructmode) { |
$r->print('<input type="submit" name="store" value="Store" /></form>'); |
$r->print('<input type="submit" name="store" value="'.&mt('Store').'" /></form>'); |
} |
} |
$r->print('</body></html>'); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} |
} |
|
|