--- loncom/interface/portfolio.pm 2006/06/22 13:27:13 1.108 +++ loncom/interface/portfolio.pm 2006/06/22 16:51:00 1.113 @@ -31,7 +31,7 @@ use Apache::lonfeedback; use Apache::lonlocal; use Apache::lonnet; use Apache::longroup; -use lib '/home/httpd/lib/perl'; +use HTML::Entities; use LONCAPA; # receives a file name and path stub from username/userfiles/portfolio/ @@ -40,9 +40,9 @@ sub make_anchor { my ($url, $filename, $current_path, $current_mode, $field_name, $continue_select,$group) = @_; if ($continue_select ne 'true') {$continue_select = 'false'}; - my $anchor = ''.$filename.''; return $anchor; @@ -63,38 +63,39 @@ sub display_common { 'createdir' => 'Create Subdirectory', 'createdir_label' => 'Create subdirectory in current directory:'); + my $escuri = &HTML::Entities::encode($r->uri,'&<>"'); $r->print(<<"TABLE"); - - - - + + - - - - - - + + + + - - + + +
- $text{'upload_label'} - $groupitem +
+ $text{'upload_label'} + $groupitem + -
- $text{'createdir_label'} - + +
+ $text{'createdir_label'} + +
$groupitem -
TABLE my @tree = split (/\//,$current_path); @@ -108,9 +109,9 @@ TABLE } $r->print(''); &Apache::lonhtmlcommon::store_recent($namespace,$current_path,$current_path); - $r->print('
'. &Apache::lonhtmlcommon::select_recent($namespace,'currentpath', @@ -153,13 +154,13 @@ sub display_directory { return; } if ($select_mode eq 'true') { + $r->print(''); $r->print(''. ''); - $r->print(''); } else { + $r->print(''); $r->print('
Select NameSizeLast Modified
'. ''); - $r->print(''); } if (defined($group)) { $r->print("\n".$groupitem."\n"); @@ -190,9 +191,9 @@ sub display_directory { if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/)) { if ($dirptr&$testdir) { if ($select_mode eq 'true'){ - $r->print(''); + $r->print(''); } else { - $r->print(''); + $r->print(''); } $r->print(''); $r->print(''); @@ -256,15 +257,15 @@ sub display_directory { } $curr_access = join('+ ',@allaccesses); } - $r->print(''); + $r->print(''); $r->print(''); $r->print(''); $r->print(''); - $r->print(''); + '">'.&mt('View/Change').''); $r->print(''); } } @@ -316,7 +317,7 @@ sub close_form { $group.'" />'); } $r->print('

'); - $r->print(' + $r->print('

'); @@ -539,18 +540,19 @@ sub update_access { } my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom, $uname); - my %access_controls = &Apache::lonnet::get_access_controls( - $current_permissions,$group,$file_name); + my %access_controls = + &Apache::lonnet::get_access_controls($current_permissions, + $group,$file_name); if ($totalprocessed) { if ($outcome eq 'ok') { my $updated_controls = $access_controls{$file_name}; my ($showstart,$showend); $r->print(&Apache::loncommon::start_data_table()); - $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('

'); - $r->print(&Apache::loncommon::end_data_table_row()); + $r->print(&Apache::loncommon::end_data_table_header_row()); foreach my $chg (sort(keys(%processing))) { if (@{$processing{$chg}} > 0) { if ($chg eq 'delete') { @@ -573,8 +575,7 @@ sub update_access { if ($chg eq 'activate') { $newkey =~ s/^(\d+)/$$translation{$1}/; } - my %content = &Apache::lonnet::parse_access_controls( - $$updated_controls{$newkey}); + my $content = $$updated_controls{$newkey}; if ($chg eq 'delete') { $showstart = &mt('Deleted'); $showend = $showstart; @@ -589,7 +590,7 @@ sub update_access { $r->print(''); } elsif ($status eq 'new') { @@ -1078,24 +1057,20 @@ function getIndex(name,value) { $r->print(''.$role_selects); $r->print('
Actions NameSizeLast ModifiedCurrent Access Status
'.&mt('open folder').'
'.&mt('closed folder').'Go to ...'.&make_anchor($url,$filename.'/',$current_path.$filename.'/',$env{'form.mode'},$env{"form.fieldname"},$env{'form.continue'},$group).''. $filename.''.$size.''.&Apache::lonlocal::locallocaltime($mtime).''.&mt($curr_access).'   '. + $r->print(''.&mt($curr_access).'   '. ''.&mt('View/Change').'
'.&mt('Type of change').''. &mt('Access control').''.&mt('Dates available'). ''.&mt('Additional information').''.&mt($scope)); if (($scope eq 'course') || ($scope eq 'group')) { if ($chg ne 'delete') { - my $cid = $content{'domain'}.'_'.$content{'number'}; + my $cid = $content->{'domain'}.'_'.$content->{'number'}; my %course_description = &Apache::lonnet::coursedescription($cid); $r->print('
('.$course_description{'description'}.')'); } @@ -598,7 +599,7 @@ sub update_access { '
'.&mt('End: ').$showend.'
'); if ($chg ne 'delete') { if ($scope eq 'guest') { - $r->print(&mt('Password').': '.$content{'password'}); + $r->print(&mt('Password').': '.$content->{'password'}); } elsif ($scope eq 'course' || $scope eq 'group') { $r->print(''); @@ -611,7 +612,7 @@ sub update_access { $r->print(''); } $r->print(''); - foreach my $id (sort(keys(%{$content{'roles'}}))) { + foreach my $id (sort(keys(%{$content->{'roles'}}))) { $r->print(''); foreach my $item ('role','access','section','group') { $r->print(''); } @@ -639,9 +640,9 @@ sub update_access { $r->print(&Apache::loncommon::end_data_table_row()); $r->print(&Apache::loncommon::end_data_table()); } elsif ($scope eq 'domains') { - $r->print(&mt('Domains: ').join(',',@{$content{'dom'}})); + $r->print(&mt('Domains: ').join(',',@{$content->{'dom'}})); } elsif ($scope eq 'users') { - my $curr_user_list = &sort_users($content{'users'}); + my $curr_user_list = &sort_users($content->{'users'}); $r->print(&mt('Users: ').$curr_user_list); } else { $r->print(' '); @@ -693,7 +694,7 @@ sub update_access { &close_form($r,$url,$group); } else { $r->print('
'. + '&currentpath='.$env{'form.currentpath'}.'">'. &mt('Display all access settings for this file').''); } return; @@ -701,95 +702,73 @@ sub update_access { sub build_access_record { my ($num,$scope,$start,$end,$chg) = @_; - my $record = ''.$start.''. - $end.''; - if ($scope eq 'guest') { - $record .= ''.$env{'form.password'}.''; + my $record = { + type => $scope, + time => { + start => $start, + end => $end + }, + }; + + if ($scope eq 'guest') { + $record->{'password'} = $env{'form.password'}; } elsif (($scope eq 'course') || ($scope eq 'group')) { - $record .= ''.$env{'form.crsdom_'.$num}.''. - $env{'form.crsnum_'.$num}.''; + $record->{'domain'} = $env{'form.crsdom_'.$num}; + $record->{'number'} = $env{'form.crsnum_'.$num}; my @role_ids; - my @delete_role_ids; - if (exists($env{'form.delete_role_'.$num})) { - @delete_role_ids = &Apache::loncommon::get_env_multiple('form.delete_role_'.$num); - } - if (exists($env{'form.preserve_role_'.$num})) { - my @preserves = &Apache::loncommon::get_env_multiple('form.preserve_role_'.$num); - if (@delete_role_ids > 0) { - foreach my $id (@preserves) { - if (grep/^\Q$id\E$/,@delete_role_ids) { - next; - } - push(@role_ids,$id); - } - } else { - push(@role_ids,@preserves); - } - } - my $next_id = ''; - if (exists($env{'form.add_role_'.$num})) { - $next_id = $env{'form.add_role_'.$num}; - if ($next_id) { - push(@role_ids,$next_id); - } - } + my @delete_role_ids = + &Apache::loncommon::get_env_multiple('form.delete_role_'.$num); + my @preserves = + &Apache::loncommon::get_env_multiple('form.preserve_role_'.$num); + if (@delete_role_ids) { + foreach my $id (@preserves) { + if (grep {$_ = $id} (@delete_role_ids)) { + next; + } + push(@role_ids,$id); + } + } else { + push(@role_ids,@preserves); + } + + my $next_id = $env{'form.add_role_'.$num}; + if ($next_id) { + push(@role_ids,$next_id); + } + foreach my $id (@role_ids) { my (@roles,@accesses,@sections,@groups); if (($id == $next_id) && ($chg eq 'update')) { - @roles = split(/,/,$env{'form.role_'.$num.'_'.$next_id}); + @roles = split(/,/,$env{'form.role_'.$num.'_'.$next_id}); @accesses = split(/,/,$env{'form.access_'.$num.'_'.$next_id}); @sections = split(/,/,$env{'form.section_'.$num.'_'.$next_id}); - @groups = split(/,/,$env{'form.group_'.$num.'_'.$next_id}); + @groups = split(/,/,$env{'form.group_'.$num.'_'.$next_id}); } else { @roles = &Apache::loncommon::get_env_multiple('form.role_'.$num.'_'.$id); @accesses = &Apache::loncommon::get_env_multiple('form.access_'.$num.'_'.$id); @sections = &Apache::loncommon::get_env_multiple('form.section_'.$num.'_'.$id); @groups = &Apache::loncommon::get_env_multiple('form.group_'.$num.'_'.$id); } - $record .= ''; - foreach my $role (@roles) { - $record .= ''.$role.''; - } - foreach my $access (@accesses) { - $record .= ''.$access.''; - } - foreach my $section (@sections) { - $record .= '
'.$section.'
'; - } - foreach my $group (@groups) { - $record .= ''.$group.''; - } - $record .= '
'; + $record->{'roles'}{$id}{'role'} = \@roles; + $record->{'roles'}{$id}{'access'} = \@accesses; + $record->{'roles'}{$id}{'section'} = \@sections; + $record->{'roles'}{$id}{'group'} = \@groups; } } elsif ($scope eq 'domains') { my @doms = &Apache::loncommon::get_env_multiple('form.dom_'.$num); - foreach my $dom (@doms) { - if ($dom ne '') { - $record .= ''.$dom.''; - } - } + $record->{'dom'} = \@doms; } elsif ($scope eq 'users') { my $userlist = $env{'form.users_'.$num}; - $userlist =~ s/[\r\n\f]+//g; - $userlist =~ s/\s+//g; - my @users = split/,/,$userlist; - my %userhash; - my @unique_users; - foreach my $user (@users) { - if (!exists($userhash{$user})) { - $userhash{$user} = 1; - push(@unique_users,$user); - } - } - $record .= ''; - foreach my $user (@unique_users) { + $userlist =~ s/\s+//sg; + my %userhash = map { ($_,1) } (split(/,/,$userlist)); + foreach my $user (keys(%userhash)) { my ($uname,$udom) = split(/:/,$user); - $record .= ''.$uname.''.$udom. - ''; - } - $record .= ''; + push(@{$record->{'users'}}, { + 'uname' => $uname, + 'udom' => $udom + }); + } } - $record .= '
'; return $record; } @@ -806,12 +785,11 @@ sub get_dates_from_form { } sub sort_users { - my ($users_hash) = @_; - my @curr_users; - foreach my $user (keys(%{$users_hash})) { - $curr_users[$$users_hash{$user}] = $user; - } - my $curr_user_list = join(",\n",@curr_users); + my ($users) = @_; + my @curr_users = map { + $_->{'uname'}.':'.$_->{'udom'} + } (@{$users}); + my $curr_user_list = join(",\n",sort(@curr_users)); return $curr_user_list; } @@ -853,9 +831,9 @@ sub access_setting_table { $r->print('
'.&mt('Teams').'
'); @@ -619,7 +620,7 @@ sub update_access { my $ucscope = $scope; $ucscope =~ s/^(\w)/uc($1)/; my $role_output; - foreach my $role (@{$content{'roles'}{$id}{$item}}) { + foreach my $role (@{$content->{'roles'}{$id}{$item}}) { if ($role eq 'all') { $role_output .= $role.','; } elsif ($role =~ /^cr/) { @@ -631,7 +632,7 @@ sub update_access { $role_output =~ s/,$//; $r->print($role_output); } else { - $r->print(join(',',@{$content{'roles'}{$id}{$item}})); + $r->print(join(',',@{$content->{'roles'}{$id}{$item}})); } $r->print('
'); - $r->print(&Apache::loncommon::end_data_table_row()); + $r->print(&Apache::loncommon::end_data_table_header_row()); $r->print(&Apache::loncommon::start_data_table_row()); if ($public) { $r->print(''); - $r->print(&Apache::loncommon::end_data_table_row()); + $r->print(&Apache::loncommon::end_data_table_header_row()); $r->print(&Apache::loncommon::start_data_table_row()); my $passwd; if ($guest) { - my %content = &Apache::lonnet::parse_access_controls( - $$access_controls{$guest}); - $passwd = $content{'password'}; + $passwd = $$access_controls{$guest}{'password'}; $r->print(''); } else { @@ -951,8 +927,8 @@ sub display_access_row { my $uctype = $type; $uctype =~ s/^(\w)/uc($1)/e; $r->print(&Apache::loncommon::start_data_table()); - $r->print(&Apache::loncommon::start_data_table_row()); - $r->print(''); if (($type eq 'course') || ($type eq 'group')) { $r->print(''); + $r->print(&Apache::loncommon::end_data_table_row()); } $r->print(&Apache::loncommon::end_data_table()); } else { @@ -989,17 +967,8 @@ sub display_access_row { return; } -sub course_row { - my ($r,$status,$type,$item,$access_controls,$tablecolor,$now,$then) = @_; - my %content; - my $defdom = $env{'user.domain'}; - if ($status eq 'old') { - %content = &Apache::lonnet::parse_access_controls( - $$access_controls{$item}); - $defdom = $content{'domain'}; - } - $r->print(&Apache::loncommon::coursebrowser_javascript($defdom)); - $r->print(qq| +sub course_js { + return qq| -|); - $r->print(&Apache::loncommon::start_data_table_row()); +|; +} + +sub course_row { + my ($r,$status,$type,$item,$access_controls,$tablecolor,$now,$then) = @_; + my %content; + my $defdom = $env{'user.domain'}; + if ($status eq 'old') { + $defdom = $$access_controls{$item}{'domain'}; + } + my $js = &Apache::loncommon::coursebrowser_javascript($defdom) + .&course_js(); my $crsgrptext = 'Groups'; if ($type eq 'group') { $crsgrptext = 'Teams'; } my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then, $type); - $r->print(''); + $r->print(''); if ($status eq 'old') { my $cid = $content{'domain'}.'_'.$content{'number'}; my %course_description = &Apache::lonnet::coursedescription($cid); @@ -1069,7 +1048,7 @@ function getIndex(name,value) { } $max_id ++; my $role_selects = &role_selectors($num,$role_id,$status,$type,\%content,'display'); - $r->print(''.$role_selects.''); + $r->print(''.$role_selects.''); } $r->print('
'); $r->print('

'.&mt('Public access:').' '.$publictext.'

'); $r->print(&Apache::loncommon::start_data_table()); - $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('
'.&mt('Action').''.&mt('Dates available').''.&actionbox('old',$publicnum,'public').''. @@ -869,16 +847,14 @@ sub access_setting_table { $r->print(' '); $r->print('

'.&mt('Password-protected access:').' '.$guesttext.'

'); $r->print(&Apache::loncommon::start_data_table()); - $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('
'.&mt('Action').''.&mt('Dates available'). ''. &mt('Password').''.&actionbox('old',$guestnum,'guest').''. &dateboxes($guestnum,$start{$guest},$end{$guest}).''.&mt('Action?').''.&mt($uctype).''. + $r->print(&Apache::loncommon::start_data_table_header_row()); + $r->print(''.&mt('Action?').''.&mt($uctype).''. &mt('Dates available').''.&mt('Allowed [_1] member affiliations',$type). @@ -963,7 +939,8 @@ sub display_access_row { } elsif ($type eq 'domains') { @all_doms = &Apache::loncommon::get_domains(); } - $r->print(&Apache::loncommon::end_data_table_row()); + $r->print(&Apache::loncommon::end_data_table_header_row()); + $r->print(&Apache::loncommon::start_data_table_row()); foreach my $key (@{$items}) { if (($type eq 'course') || ($type eq 'group')) { &course_row($r,$status,$type,$key,$access_controls, @@ -976,10 +953,11 @@ sub display_access_row { } } $r->print(&Apache::loncommon::end_data_table_row()); - $r->print(&Apache::loncommon::start_data_table_row()); if ($status eq 'old') { + $r->print(&Apache::loncommon::start_data_table_row()); $r->print(''.&additional_item($type). ''.&actionbox($status,$num,$scope).''.$js.&actionbox($status,$num,$scope).'



'.&mt('Add a roles-based condition').' 
'.&mt('Add').'
'); } - $r->print(&Apache::loncommon::end_data_table_row()); return; } sub domains_row { my ($r,$status,$item,$all_doms,$access_controls,$now,$then) = @_; - $r->print(&Apache::loncommon::start_data_table_row()); my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then, 'domains'); - my $dom_select = ''. ' '; - $r->print(&Apache::loncommon::start_data_table_row()); if ($status eq 'old') { - my %content = &Apache::lonnet::parse_access_controls( - $$access_controls{$item}); - my @curr_doms = @{$content{'dom'}}; - foreach my $dom (@{$all_doms}) { - if ((@{$content{'dom'}} > 0) && (grep(/^\Q$dom\E$/,@{$content{'dom'}}))) { + my $content = $$access_controls{$item}; + foreach my $dom (@{$all_doms}) { + if ((@{$content->{'dom'}} > 0) + && (grep(/^\Q$dom\E$/,@{$content->{'dom'}}))) { $dom_select .= ''; } else { @@ -1107,25 +1082,21 @@ sub domains_row { $dom_select .= ''; } } + $dom_select .= ''; $r->print(''.&actionbox($status,$num,$scope).''.$dom_select. ''.&dateboxes($num,$start,$end).''); - $r->print(&Apache::loncommon::end_data_table_row()); - $r->print(&Apache::loncommon::start_data_table_row()); } sub users_row { my ($r,$status,$item,$access_controls,$now,$then) = @_; - $r->print(&Apache::loncommon::start_data_table_row()); my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then, 'users'); my $curr_user_list; if ($status eq 'old') { - my %content = &Apache::lonnet::parse_access_controls( - $$access_controls{$item}); - $curr_user_list = &sort_users($content{'users'}); + my $content = $$access_controls{$item}; + $curr_user_list = &sort_users($content->{'users'}); } $r->print(''.&actionbox($status,$num,$scope).''.&mt("Format for users' username:domain information:").'
sparty:msu,illini:uiuc ... etc.
'.&dateboxes($num,$start,$end).''); - $r->print(&Apache::loncommon::end_data_table_row()); } sub additional_item { @@ -1136,17 +1107,17 @@ sub additional_item { sub actionbox { my ($status,$num,$scope) = @_; - my $output = ''. + '" />'.&mt('Delete').'
'. '
'; + $output .= ''; return $output; } @@ -1161,10 +1132,10 @@ sub dateboxes { undef,undef,1); my $enddate = &Apache::lonhtmlcommon::date_setter('portform', 'enddate_'.$num,$end,undef,undef,undef,1,undef, - undef,undef,1). '  '; + ''; my $output = &mt('Start: ').$startdate.'
'.&mt('End: ').$enddate; return $output; @@ -1307,7 +1278,7 @@ sub select_files { $java_files.=','; } my $javascript =(< +