# The LearningOnline Network with CAPA
# Handler to show and edit custom distribution rights
#
# $Id: lonrights.pm,v 1.4 2003/03/20 19:20:31 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
#
###
package Apache::lonrights;
use strict;
use Apache::Constants qw(:common :http);
use Apache::lonnet();
use Apache::loncommon();
use HTML::LCParser;
use Apache::File;
sub handler {
my $r=shift;
$r->content_type('text/html');
$r->send_http_header;
$r->print(
'<html><head><title>LON-CAPA Custom Distribution Rights</title></head>');
$r->print(&Apache::loncommon::bodytag('Custom Distribution Rights'));
my $uri=$r->uri;
my $fn=&Apache::lonnet::filelocation('',$uri);
my $contents='';
my $constructmode=($uri=~/^\/\~/);
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">');
}
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" value="Store" /></form>');
}
$r->print('</body></html>');
return OK;
}
1;
__END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>