version 1.1, 2003/03/14 02:26:12
|
version 1.5, 2003/03/20 20:58:40
|
Line 34 use strict;
|
Line 34 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 Apache::File; |
|
|
sub handler { |
sub handler { |
|
|
Line 41 sub handler {
|
Line 43 sub handler {
|
$r->content_type('text/html'); |
$r->content_type('text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
$r->print('<html><head><title>LON-CAPA Custom Distribution Rights</title></head>'); |
$r->print( |
|
'<html><head><title>LON-CAPA Custom Distribution Rights</title></head>'); |
|
|
$r->print(&Apache::loncommon::bodytag('Custom Distribution Rights')); |
$r->print(&Apache::loncommon::bodytag('Custom Distribution Rights')); |
|
$r->rflush(); |
|
|
|
my $uri=$r->uri; |
|
my $fn=&Apache::lonnet::filelocation('',$uri); |
|
my $contents=''; |
|
my $constructmode=($uri=~/^\/\~/); |
|
|
|
# ============================================================ Modify and store |
|
if ($constructmode) { |
|
if ($ENV{'form.store'}) { |
|
my @newrules=(); |
|
undef @newrules; |
|
# read rules from form |
|
foreach (keys %ENV) { |
|
if ($_=~/^form\.effect\_(\d+)$/) { |
|
my $number=$1; |
|
my %rulehash=(); |
|
foreach ('effect','domain','course','section','role') { |
|
$rulehash{$_}=$ENV{'form.'.$_.'_'.$number}; |
|
} |
|
if ($rulehash{'role'} eq 'au') { |
|
$rulehash{'course'}=''; |
|
$rulehash{'section'}=''; |
|
} |
|
if ($rulehash{'role'} eq 'cc') { |
|
$rulehash{'section'}=''; |
|
} |
|
unless (($rulehash{'effect'} eq 'deny') || |
|
($rulehash{'effect'} eq 'allow')) { |
|
$rulehash{'effect'}='deny'; |
|
} |
|
$rulehash{'domain'}=~s/\W//g; |
|
$rulehash{'course'}=~s/\W//g; |
|
$rulehash{'section'}=~s/\W//g; |
|
unless ($rulehash{'domain'}) { |
|
$rulehash{'domain'}=$ENV{'user.domain'}; |
|
} |
|
my $realm=''; |
|
if ($number) { |
|
$realm=$rulehash{'domain'}; |
|
if ($rulehash{'course'}) { |
|
$realm.='_'.$rulehash{'course'}; |
|
} |
|
if ($rulehash{'section'}) { |
|
$realm.='_'.$rulehash{'section'}; |
|
} |
|
} |
|
$newrules[$number]=$rulehash{'effect'}.':'. |
|
$realm.':'.$rulehash{'role'}; |
|
} |
|
} |
|
# edit actions? |
|
|
|
# store file |
|
my $fh=Apache::File->new('>'.$fn); |
|
foreach (my $i=0;$i<=$#newrules;$i++) { |
|
if ($newrules[$i]) { |
|
my ($effect,$realm,$role)=split(/\:/,$newrules[$i]); |
|
print $fh |
|
"<accessrule effect='$effect' realm='$realm' role='$role' />\n"; |
|
} |
|
} |
|
$fh->close; |
|
} |
|
} |
|
# ============================================================ Read and display |
|
unless ($constructmode) { |
|
# =========================================== This is not in construction space |
|
$contents=&Apache::lonnet::getfile($fn); |
|
if ($contents==-1) { $contents=''; } |
|
} else { |
|
# =============================================== This is in construction space |
|
if (-e $fn) { |
|
my $fh=Apache::File->new($fn); |
|
$contents=join('',<$fh>); |
|
$fh->close(); |
|
} |
|
$r->print('<form method="post">'); |
|
} |
|
unless ($contents=~/\<accessrule/s) { |
|
$contents='<accessrule effect="deny" />'; |
|
} |
|
my $parser=HTML::LCParser->new(\$contents); |
|
my $token; |
|
my $rulecounter=0; |
|
my $colzero=($constructmode?'Edit action':'Rule'); |
|
# ---------------------------------------------------------- Start table output |
|
$r->print(<<ENDSTARTTABLE); |
|
<table border="2"> |
|
<tr><th>$colzero</th><th>Effect</th><th>Domain</th><th>Course</th> |
|
<th>Section</th><th>Role</th></tr> |
|
ENDSTARTTABLE |
|
# --------------------------------------------------------------------- Default |
|
# Fast forward to first rule |
|
$token=$parser->get_token; |
|
while ($token->[1] ne 'accessrule') { $token=$parser->get_token; } |
|
# print default |
|
$r->print('<tr><td> </td><td>'); |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::select_form |
|
($token->[2]->{'effect'},'effect_0', |
|
('allow' => 'allow', |
|
'deny' => 'deny'))); |
|
} else { |
|
$r->print($token->[2]->{'effect'}); |
|
} |
|
$r->print('</td><td colspan="4">Default'); |
|
if (($token->[2]->{'realm'}) || ($token->[2]->{'role'})) { |
|
$r->print(' - <font color="red">Error! No default set.</font>'); |
|
} |
|
$r->print('</td></tr>'); |
|
# Additional roles |
|
while ($token=$parser->get_token) { |
|
if (($token->[0] eq 'S') && ($token->[1] eq 'accessrule')) { |
|
$rulecounter++; |
|
$r->print('<tr><td>'); |
|
# insert, delete, etc |
|
$r->print($rulecounter.'. '); |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::select_form( |
|
'','action_'.$rulecounter, |
|
('' => '', |
|
'delete' => 'Delete this rule', |
|
'insertabove' => 'Insert rule above', |
|
'insertbelow' => 'Insert rule below', |
|
'moveup' => 'Move rule up', |
|
'movedown' => 'Move rule down'))); |
|
} |
|
$r->print('</td><td>'); |
|
# effect |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::select_form |
|
($token->[2]->{'effect'}, |
|
'effect_'.$rulecounter, |
|
('allow' => 'allow', |
|
'deny' => 'deny'))); |
|
} else { |
|
$r->print($token->[2]->{'effect'}); |
|
} |
|
$r->print('</td><td>'); |
|
# ---- realm |
|
my $realm=$token->[2]->{'realm'}; |
|
$realm=~s/^\W//; |
|
my ($rdom,$rcourse,$rsec)=split(/[\/\_]/,$realm); |
|
# realm role |
|
if ($constructmode) { |
|
$r->print(&Apache::loncommon::select_dom_form($rdom, |
|
'domain_'.$rulecounter)); |
|
} else { |
|
$r->print($rdom); |
|
} |
|
$r->print('</td><td>'); |
|
# realm course |
|
if ($constructmode) { |
|
$r->print('<input input type="text" size="25" name="course_'. |
|
$rulecounter.'" value="'.$rcourse.'" />'); |
|
} else { |
|
$r->print($rcourse); |
|
} |
|
|
|
$r->print('</td><td>'); |
|
# realm section |
|
if ($constructmode) { |
|
$r->print('<input input type="text" size="5" name="section_'. |
|
$rulecounter.'" value="'.$rsec.'" />'); |
|
} else { |
|
$r->print($rsec); |
|
} |
|
|
|
$r->print('</td><td>'); |
|
# role |
|
if ($constructmode) { |
|
my %hash=('' => ''); |
|
foreach ('au','cc','in','ta','st') { |
|
$hash{$_}=&Apache::lonnet::plaintext($_); |
|
} |
|
my $role=$token->[2]->{'role'}; |
|
unless ($role) { $role=''; } |
|
$r->print(&Apache::loncommon::select_form( |
|
$role,'role_'.$rulecounter,%hash)); |
|
} else { |
|
$r->print(&Apache::lonnet::plaintext($token->[2]->{'role'})); |
|
} |
|
# close row |
|
$r->print('</td></tr>'); |
|
} |
|
} |
|
$r->print('</table>'); |
|
# ------------------------------------------------------------ End table output |
|
if ($constructmode) { |
|
$r->print('<input type="submit" name="store" value="Store" /></form>'); |
|
} |
$r->print('</body></html>'); |
$r->print('</body></html>'); |
return OK; |
return OK; |
} |
} |