--- loncom/publisher/lonrights.pm 2007/05/02 01:34:23 1.22 +++ loncom/publisher/lonrights.pm 2007/06/22 00:11:22 1.23 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to show and edit custom distribution rights # -# $Id: lonrights.pm,v 1.22 2007/05/02 01:34:23 albertel Exp $ +# $Id: lonrights.pm,v 1.23 2007/06/22 00:11:22 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -55,8 +55,8 @@ sub handler { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - my $js = &Apache::loncommon::coursebrowser_javascript(); - + my $js = &Apache::loncommon::coursebrowser_javascript(). + &Apache::loncommon::studentbrowser_javascript(); $r->print(&Apache::loncommon::start_page('Custom Distribution Rights',$js)); $r->rflush(); @@ -66,90 +66,101 @@ sub handler { my $constructmode=($uri=~/^\/\~/); # ============================================================ Modify and store - if ($constructmode) { - if ($env{'form.store'}) { - my @newrules=(); - undef @newrules; + if ($constructmode && $env{'form.store'}) { + + my @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'} = &LONCAPA::clean_domain($rulehash{'domain'}); - $rulehash{'course'} = &LONCAPA::clean_courseid($rulehash{'course'}); - $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'}; - } - } + foreach my $key (keys(%env)) { + next if ($key!~/^form\.effect\_(\d+)$/); + my $number=$1; + my %rulehash; + foreach my $action ('effect','type','domain','course','section','role') { + $rulehash{$action}=$env{'form.'.$action.'_'.$number}; + } + if ($rulehash{'type'} !~ /^(user|course)$/) { + $rulehash{'type'} = 'course'; + } + if ($rulehash{'type'} eq 'user') { + $rulehash{'section'}=''; + $rulehash{'role'}=''; + } + 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'} = + &LONCAPA::clean_domain($rulehash{'domain'}); + if ($rulehash{'type'} eq 'course') { + $rulehash{'course'} = + &LONCAPA::clean_courseid($rulehash{'course'}); + } else { + $rulehash{'course'} = + &LONCAPA::clean_username($rulehash{'course'}); + } + $rulehash{'section'}=~s/\W//g; + if (!$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'}.':'.$rulehash{'type'}; + } # 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'; - } + foreach my $key (keys(%env)) { + next if ($key!~/^form\.action\_(\d+)$/); + my $number=$1; + if ($env{$key} eq 'delete') { $newrules[$number]=''; } + if (($env{$key} eq 'moveup') && ($number>1)) { + my $buffer=$newrules[$number]; + $newrules[$number]=$newrules[$number-1]; + $newrules[$number-1]=$buffer; + } + if (($env{$key} eq 'movedown') && ($number<$#newrules)) { + my $buffer=$newrules[$number]; + $newrules[$number]=$newrules[$number+1]; + $newrules[$number+1]=$buffer; + } + if ($env{$key} eq 'insertabove') { + for (my $i=$#newrules;$i>=$number;$i--) { + $newrules[$i+1]=$newrules[$i]; } - } - + $newrules[$number]='deny'; + } + if ($env{$key} eq 'insertbelow') { + for (my $i=$#newrules;$i>$number;$i--) { + $newrules[$i+1]=$newrules[$i]; + } + $newrules[$number+1]='deny'; + } + } + # 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 - "\n"; - } - } - $fh->close; + my $fh=Apache::File->new('>'.$fn); + foreach (my $i=0;$i<=$#newrules;$i++) { + if ($newrules[$i]) { + my ($effect,$realm,$role,$type)=split(/\:/,$newrules[$i]); + print $fh + "\n"; + } } + $fh->close; } # ============================================================ Read and display unless ($constructmode) { @@ -178,17 +189,17 @@ sub handler { 'se' => 'Section', 'ro' => 'Role'); # ---------------------------------------------------------- Start table output - $r->print(< - $colzero$lt{'ef'}$lt{'do'}$lt{'co'} -$lt{'se'}$lt{'ro'} -ENDSTARTTABLE + $r->print(&Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + "$colzero$lt{'ef'}Type$lt{'do'}". + "$lt{'co'}$lt{'se'}$lt{'ro'}". + &Apache::loncommon::end_data_table_header_row()); # --------------------------------------------------------------------- Default # Fast forward to first rule $token=$parser->get_token; while ($token->[1] ne 'accessrule') { $token=$parser->get_token; } # print default - $r->print(''); + $r->print(&Apache::loncommon::start_data_table_row().''); if ($constructmode) { $r->print(&Apache::loncommon::select_form('','action_0', ('' => '', @@ -206,19 +217,20 @@ ENDSTARTTABLE } else { $r->print($token->[2]->{'effect'}); } - $r->print('Default'); + $r->print(''.&mt('Default')); if (($token->[2]->{'realm'}) || ($token->[2]->{'role'})) { - $r->print(' - '.&mt('Error! No default set.'). - ''); + $r->print(' - '.&mt('Error! No default set.'). + ''); } - $r->print(''); + $r->print(''.&Apache::loncommon::end_data_table_row()); # Additional roles while ($token=$parser->get_token) { if (($token->[0] eq 'S') && ($token->[1] eq 'accessrule')) { $rulecounter++; - $r->print(''); + $r->print(&Apache::loncommon::start_data_table_row(). + ''); # insert, delete, etc - $r->print($rulecounter.'. '); + $r->print(''.$rulecounter.'. '); if ($constructmode) { $r->print(&Apache::loncommon::select_form( '','action_'.$rulecounter, @@ -229,7 +241,8 @@ ENDSTARTTABLE 'moveup' => 'Move rule up', 'movedown' => 'Move rule down'))); } - $r->print(''); + $r->print(''. + ''); # effect if ($constructmode) { $r->print(&Apache::loncommon::select_form @@ -240,12 +253,31 @@ ENDSTARTTABLE } else { $r->print($token->[2]->{'effect'}); } - $r->print(''); + +# type + $r->print(''); + my $type = ($token->[2]{'type'} || 'course'); + if ($constructmode) { + $r->print(&Apache::loncommon::select_form($type, + 'type_'.$rulecounter, + ('course' => 'Course', + 'user' => 'User'))); + } else { + $r->print($type); + } + # ---- realm my $realm=$token->[2]->{'realm'}; my ($rdom,$rcourse,$rsec)=split(/[\/\_]/,$realm); $rdom = &LONCAPA::clean_domain($rdom); - $rcourse = &LONCAPA::clean_courseid($rcourse); + if ($type eq 'course') { + $rcourse = &LONCAPA::clean_courseid($rcourse); + } else { + $rcourse = &LONCAPA::clean_username($rcourse); + } + + + $r->print(''); # realm domain if ($constructmode) { unless ($rdom) { $rdom=$env{'user.domain'}; } @@ -257,52 +289,69 @@ ENDSTARTTABLE $r->print(''); # realm course if ($constructmode) { - $r->print(''); } else { $r->print($rcourse); } - $r->print(''); + $r->print(''); # realm section - if ($constructmode) { - $r->print(''); - } else { - $r->print($rsec); - } + if ($type eq 'course') { + if ($constructmode) { + $r->print(''); + } else { + $r->print($rsec); + } + } $r->print(''); # 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'})); - } + if ($type eq 'course') { + 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'})); + } + } # course selection link - $r->print(''); - 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)); + $r->print(''. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::continue_data_table_row(). + ''); + if ($type eq 'course') { + 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)); + } + } else { + if ($rcourse) { + my $name = &Apache::loncommon::plainname($rcourse,$rdom); + $r->print($name.'   '); + } + if ($constructmode) { + $r->print(&Apache::loncommon::selectstudent_link('rules','course_'.$rulecounter,'domain_'.$rulecounter)); + } } # close row - $r->print(''); + $r->print(''.&Apache::loncommon::end_data_table_row()); } } - $r->print(''); + $r->print(&Apache::loncommon::end_data_table()); # ------------------------------------------------------------ End table output if ($constructmode) { $r->print('');