--- loncom/interface/portfolio.pm 2006/12/11 03:43:15 1.175 +++ loncom/interface/portfolio.pm 2009/01/03 19:39:37 1.196.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network # portfolio browser # -# $Id: portfolio.pm,v 1.175 2006/12/11 03:43:15 raeburn Exp $ +# $Id: portfolio.pm,v 1.196.2.2 2009/01/03 19:39:37 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -80,7 +80,7 @@ sub make_anchor { my $dirptr=16384; sub display_common { - my ($r,$url,$current_path,$is_empty,$dir_list,$can_upload)=@_; + my ($r,$url,$current_path,$is_empty,$dir_list,$can_upload,$group)=@_; my $namespace = &get_namespace(); my $port_path = &get_port_path(); if ($can_upload) { @@ -93,15 +93,27 @@ sub display_common { 'Upload file to current directory:', 'createdir' => 'Create Subdirectory', 'createdir_label' => - 'Create subdirectory in current directory:'); + 'Create subdirectory in current directory:', + 'parse' => 'If HTML file, upload embedded images/multimedia/css/linked files' + ); my $escuri = &HTML::Entities::encode($r->uri,'&<>"'); my $help_fileupload = &Apache::loncommon::help_open_topic('Portfolio AddFiles'); my $help_createdir = &Apache::loncommon::help_open_topic('Portfolio CreateDirectory'); - - # FIXME: This line should be deleted once Portfolio uses breadcrumbs - $r->print(&Apache::loncommon::help_open_topic('Portfolio About', 'Help on the portfolio')); - - $r->print(<<"TABLE"); + my $help_portfolio = &Apache::loncommon::help_open_topic('Portfolio About', &mt('Help on the portfolio')); + $r->print(&display_usage($group)); + my $parse_check; + if (!&suppress_embed_prompt()) { + $parse_check = <<"END"; +
+ + + +END + } + $r->print(<<"TABLE"); +$help_portfolio @@ -125,7 +139,7 @@ sub display_common { '); $r->print(''); } else { # this is a graded or handed back file - my ($user,$domain) = &get_name_dom(); + my ($user,$domain) = &get_name_dom($env{'form.group'}); my $permissions_hash = &Apache::lonnet::get_portfile_permissions($domain,$user); if (defined($$permissions_hash{$fullpath})) { foreach my $array_item (@{$$permissions_hash{$fullpath}}) { @@ -212,7 +268,7 @@ sub display_directory_line { $r->print(''); $r->print(''); if ($select_mode ne 'true') { - $r->print(''); @@ -1219,7 +1273,7 @@ sub standard_settings { $r->print(&Apache::loncommon::end_data_table_row()); $r->print(&Apache::loncommon::end_data_table()); $r->print(''); $colspan ++; } elsif ($type eq 'domains') { - @all_doms = &Apache::loncommon::get_domains(); + @all_doms = sort(&Apache::lonnet::all_domains()); } $r->print(&Apache::loncommon::end_data_table_header_row()); foreach my $key (@{$items}) { @@ -1370,8 +1424,8 @@ sub display_access_row { } $r->print(&Apache::loncommon::end_data_table()); } else { - $r->print(&mt('No [_1]-based conditions defined.
',$type). - &additional_item($type)); + $r->print(&mt('No [_1]-based conditions defined.',&mt($type)).'
' + .&additional_item($type)); } return; } @@ -1461,7 +1515,7 @@ sub course_row { } $max_id ++; my $role_selects = &role_selectors($num,$role_id,$type,$content,'display'); - $r->print(''.$role_selects.''); + $r->print(''.$role_selects.''); } $r->print('
@@ -115,7 +127,9 @@ sub display_common { - $help_fileupload + +$help_fileupload +$parse_check
- $groupitem + $groupitem @@ -147,12 +161,12 @@ TABLE ); $r->print(''.&make_anchor($url,\%anchor_fields,$port_path).'/'); if (@tree > 1){ - my $newCurrentPath = ''; + my $newCurrentPath = '/'; for (my $i = 1; $i< @tree; $i++){ $newCurrentPath .= $tree[$i].'/'; my %anchor_fields = ( 'selectfile' => $tree[$i], - 'currentpath' => '/', + 'currentpath' => $newCurrentPath, 'mode' => $env{"form.mode"}, 'fieldname' => $env{"form.fieldname"}, 'continue' => $env{"form.continue"} @@ -170,6 +184,48 @@ TABLE $r->print(""); } +sub display_usage { + my ($group) = @_; + my $disk_quota = &get_quota($group); + my $getpropath = 1; + my $portfolio_root = &get_portfolio_root(); + my ($uname,$udom) = &get_name_dom($group); + my $current_disk_usage = + &Apache::lonnet::diskusage($udom,$uname,$portfolio_root,$getpropath); + my $usage = $current_disk_usage/1000; + my $quota = $disk_quota/1000; + my $percent; + if ($disk_quota == 0) { + $percent = 100.0; + } else { + $percent = 100*($current_disk_usage/$disk_quota); + } + $usage = sprintf("%.2f",$usage); + $quota = sprintf("%.2f",$quota); + $percent = sprintf("%.0f",$percent); + my ($color,$cssclass); + if ($percent <= 60) { + $color = '#00A000'; + } elsif ($percent > 60 && $percent < 90) { + $color = '#FFD300'; + $cssclass = 'class="LC_warning"'; + } elsif( $percent >= 90) { + $color = '#FF0000'; + $cssclass = 'class="LC_error"'; + } + my $prog_width = $percent; + if ($prog_width > 100) { + $prog_width = 100; + } + my $disk_meter = ' +
'.&mt('Currently using [_1] of the [_2] available.',$usage.' MB ('.$percent.'%)',$quota.' MB')."\n". +'
'."\n". +'
'."\n". +'
'."\n". +'

'; + return $disk_meter; +} + sub display_directory_line { my ($r,$select_mode, $filename, $mtime, $size, $css_class, $line, $access_controls, $curr_access, $now, $version_flag, @@ -183,7 +239,7 @@ sub display_directory_line { $r->print('
'.$version_flag.''.$size.''.&Apache::lonlocal::locallocaltime($mtime).''. + $r->print(''. &mt($curr_access).'   '); my %anchor_fields = ( 'access' => $filename, @@ -231,7 +287,7 @@ sub display_directory { my $select_mode; my $checked_files; my $port_path = &get_port_path(); - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my $access_admin_text = &mt('View Status'); if ($can_setacl) { $access_admin_text = &mt('View/Change Status'); @@ -267,15 +323,16 @@ sub display_directory { } else { $r->print('
'); $r->print(&Apache::loncommon::help_open_topic('Portfolio FileList', - 'Using the portfolio file list')); + &mt('Using the portfolio file list'))); $r->print(''. - ''); + '' + .'' + .'' + .'' + .'' + .'' + .'' + .''); } $r->print("\n".&group_form_data()."\n"); @@ -289,8 +346,6 @@ sub display_directory { my ($bfile)=split('&',$b,2); return (lc($afile) cmp lc($bfile)); } (@$dir_list)) { - #$strip holds directory/file name - #$dom my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_line,16); $filename =~ s/\s+$//; my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename); @@ -340,7 +395,7 @@ sub display_directory { undef($colspan); } $r->print(''); - $r->print(''); + $r->print(''); my %anchor_fields = ( 'selectfile' => $filename.'/', 'currentpath' => $current_path.$filename.'/', @@ -364,7 +419,7 @@ sub display_directory { my %anchor_fields = ( 'lockinfo' => $fullpath ); - $line.=''; + $line.=''; $css_class= 'LC_browser_file_locked'; } else { if (!$can_modify) { @@ -382,7 +437,7 @@ sub display_directory { 'rename' => $filename, currentpath => $current_path ); - $line .= &make_anchor($url,\%anchor_fields,'Rename'); + $line .= &make_anchor($url,\%anchor_fields,&mt('Rename')); $line .= '
Actions'. - &Apache::loncommon::help_open_topic('Portfolio FileAction'). - '  Name'. - &Apache::loncommon::help_open_topic('Portfolio OpenFile'). - 'SizeLast ModifiedCurrent Access Status'. - &Apache::loncommon::help_open_topic('Portfolio ShareFile'). - '
'.&mt('Actions'). &Apache::loncommon::help_open_topic('Portfolio FileAction').'  '.&mt('Name').&Apache::loncommon::help_open_topic('Portfolio OpenFile').''.&mt('Size').''.&mt('Last Modified').''.&mt('Current Access Status').&Apache::loncommon::help_open_topic('Portfolio ShareFile').'
'.&mt('closed folder').'Go to ...'.&mt('Go to ...').''.&make_anchor($url,\%anchor_fields,'Locked').''.&make_anchor($url,\%anchor_fields,&mt('Locked')).''.&make_anchor($href_edit_location.$filename.'.meta',\%anchor_fields,$cat); # ''.$cat.''; } @@ -451,7 +506,7 @@ sub display_directory { $r->print('
'); if ($can_delete) { $r->print(' - '. + '. &Apache::loncommon::help_open_topic('Portfolio DeleteFile').' @@ -532,19 +587,19 @@ sub done { } sub delete { - my ($r,$url)=@_; + my ($r,$url,$group)=@_; my @check; my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'}; $file_name = &prepend_group($file_name); my @files=&Apache::loncommon::get_env_multiple('form.selectfile'); - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') { - $r->print("The file is locked and cannot be deleted.
"); + $r->print(&mt('The file is locked and cannot be deleted.').'
'); $r->print(&done('Back',$url)); } else { if (scalar(@files)) { &open_form($r,$url); - $r->print('

'.&mt('Delete').' '.&display_file(undef,\@files).'?

'); + $r->print('

'.&mt('Delete [_1]?',&display_file(undef,\@files)).'

'); &close_form($r,$url); } else { $r->print("No file was checked to delete.
"); @@ -557,7 +612,7 @@ sub delete_confirmed { my ($r,$url,$group)=@_; my @files=&Apache::loncommon::get_env_multiple('form.selectfile'); my $result; - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my $port_path = &get_port_path(); my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom, $uname); @@ -566,10 +621,10 @@ sub delete_confirmed { $env{'form.currentpath'}. $delete_file); if ($result ne 'ok') { - $r->print(''. - &mt('An error occured ([_1]) while trying to delete - [_2].',$result,&display_file(undef, $delete_file)). - '

'); + $r->print('' + .&mt('An error occurred ([_1]) while trying to delete [_2].' + ,$result,&display_file(undef, $delete_file)) + .'

'); } else { $r->print(&mt('File: [_1] deleted.', &display_file(undef,$delete_file))); @@ -588,7 +643,7 @@ sub delete_confirmed { &Apache::lonnet::modify_access_controls($file_name,\%changes, $udom,$uname); if ($outcome ne 'ok') { - $r->print('
'.&mt("An error occured ([_1]) while ". + $r->print('
'.&mt("An error occurred ([_1]) while ". "trying to delete access controls for the file.",$outcome). '

'); } else { @@ -596,7 +651,7 @@ sub delete_confirmed { $r->print('
'.&mt('Access controls also deleted for the file.').'

'); } else { $r->print(''.'
'. - &mt("An error occured ([_1]) while ". + &mt("An error occurred ([_1]) while ". "trying to delete access controls for the file.",$deloutcome). '


'); } @@ -611,30 +666,29 @@ sub delete_confirmed { sub delete_dir { my ($r,$url)=@_; &open_form($r,$url); - $r->print('

'.&mt('Delete').' '.&display_file().'?

'); + $r->print('

'.&mt('Delete [_1]?',&display_file()).'

'); &close_form($r,$url); } sub delete_dir_confirmed { - my ($r,$url)=@_; + my ($r,$url,$group)=@_; my $directory_name = $env{'form.currentpath'}; $directory_name =~ s|/$||; # remove any trailing slash - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my $namespace = &get_namespace(); my $port_path = &get_port_path(); my $result=&Apache::lonnet::removeuserfile($uname,$udom,$port_path. $directory_name); if ($result ne 'ok') { - $r->print(' An error occured (dir) ('.$result. - ') while trying to delete '.$directory_name.'
'); + $r->print('' + .&mt('An error occurred (dir) ([_1]) while trying to delete [_2].' + ,$result,$directory_name) + .'
'); } else { # now remove from recent -# $r->print('
removing '.$directory_name.'
print("The file is locked and cannot be renamed.
"); $r->print(&done(undef,$url)); } else { &open_form($r,$url); - $r->print('

'.&mt('Rename').' '.&display_file().' to - ?

'); + $r->print('

'.&mt('Rename [_1] to [_2]?', &display_file() + , '').'

'); &close_form($r,$url); } } @@ -663,7 +717,7 @@ sub rename { sub rename_confirmed { my ($r,$url,$group)=@_; my $filenewname=&Apache::lonnet::clean_filename($env{'form.filenewname'}); - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my $port_path = &get_port_path(); if ($filenewname eq '') { $r->print(''. @@ -681,9 +735,9 @@ sub rename_confirmed { $chg_access = &access_for_renamed($filenewname,$group,$udom,$uname); } else { $r->print(''. - &mt('An error occured ([_1]) while trying to rename [_2]' - .' to [_3]',$result,&display_file(), - &display_file('',$filenewname)).'
'); + &mt('An error occurred ([_1]) while trying to rename [_2] to [_3].' + ,$result,&display_file(),&display_file('',$filenewname)) + .'

'); return; } if ($filenewname ne $env{'form.filenewname'}) { @@ -718,13 +772,13 @@ sub access_for_renamed { &Apache::lonnet::modify_access_controls($oldfile,\%change_old, $udom,$uname); if ($outcome ne 'ok') { - $chg_text ='

'.&mt("An error occured ([_1]) while ". + $chg_text ='

'.&mt("An error occurred ([_1]) while ". "trying to delete access control records for the old name.",$outcome). '
'; } else { if ($deloutcome ne 'ok') { $chg_text = '


'. - &mt("An error occured ([_1]) while ". + &mt("An error occurred ([_1]) while ". "trying to delete access control records for the old name.",$deloutcome). '

'; } @@ -734,7 +788,7 @@ sub access_for_renamed { $udom,$uname); if ($outcome ne 'ok') { $chg_text .= '

'. - &mt("An error occured ([_1]) while ". + &mt("An error occurred ([_1]) while ". "trying to update access control records for the new name.",$outcome). '
'; } @@ -747,7 +801,7 @@ sub access_for_renamed { sub display_access { my ($r,$url,$group,$can_setacl,$port_path,$action) = @_; - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my $file_name = $env{'form.currentpath'}.$env{'form.access'}; $file_name = &prepend_group($file_name); my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom, @@ -762,13 +816,13 @@ sub display_access { $info .= '
  • '.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.'); $info .= '
  • '.&explain_conditionals(); $info .= '
  • '. - &mt('A listing of files viewable without log-in is available at: ')."http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme/portfolio.
    "; + &mt('A listing of files viewable without log-in is available at: ')."".&Apache::lonnet::absolute_url($ENV{'SERVER_NAME'})."/adm/$udom/$uname/aboutme/portfolio.
    "; if ($group eq '') { $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on your personal information page:"); } else { $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on the course information page:"); } - $info .= "
    http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme
    "; + $info .= "
    ".&Apache::lonnet::absolute_url($ENV{'SERVER_NAME'})."/adm/$udom/$uname/aboutme
    "; if ($group ne '') { $info .= &mt("Users with privileges to edit course contents may add a course information page to a course using the 'Course Info' button in DOCS").'
    '; } @@ -779,14 +833,14 @@ sub display_access { if ($can_setacl) { &open_form($r,$url); $r->print($header.$info); - $r->print('
    '.&Apache::loncommon::help_open_topic('Portfolio ShareFile SetAccess', 'Help on setting up share access')); - $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile ChangeSetting', 'Help on changing settings')); - $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile StopAccess', 'Help on removing share access')); + $r->print('
    '.&Apache::loncommon::help_open_topic('Portfolio ShareFile SetAccess', &mt('Help on setting up share access'))); + $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile ChangeSetting', &mt('Help on changing settings'))); + $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile StopAccess', &mt('Help on removing share access'))); &access_setting_table($r,$url,$file_name,$access_controls{$file_name}, $action); my $button_text = { 'continue' => &mt('Proceed'), - 'cancel' => &mt('Back to directory listing'), + 'cancel' => &mt('Return to directory'), }; &close_form($r,$url,$button_text); } else { @@ -814,7 +868,7 @@ sub view_access_settings { $todisplay{$scope}{$key} = $$access_controls{$key}; } if ($aclcount) { - $r->print(&mt('

    Current access controls defined for this file:

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

    '.&mt('Current access controls defined for this file:').'

    '); $r->print(&Apache::loncommon::start_data_table()); $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('
    '.&mt('Access control').''.&mt('Dates available'). @@ -825,12 +879,12 @@ sub view_access_settings { &build_access_summary($r,$count,$chg,%todisplay); $r->print(&Apache::loncommon::end_data_table()); } else { - $r->print(&mt('No access control settings currently exist for this file.
    ' )); + $r->print(&mt('No access control settings currently exist for this file.').'
    '); } my %anchor_fields = ( 'currentpath' => $env{'form.currentpath'} ); - $r->print('
    '.&make_anchor($url, \%anchor_fields, &mt('Return to directory listing'))); + $r->print('
    '.&make_anchor($url, \%anchor_fields, &mt('Return to directory'))); return; } @@ -961,7 +1015,7 @@ sub update_access { $r->print('

    '.&mt('Allowing others to retrieve file: [_1]', $port_path.$file_name).'

    '."\n"); $file_name = &prepend_group($file_name); - my ($uname,$udom) = &get_name_dom(); + my ($uname,$udom) = &get_name_dom($group); my ($errors,$outcome,$deloutcome,$new_values,$translation); if ($totalprocessed) { ($outcome,$deloutcome,$new_values,$translation) = @@ -1014,7 +1068,7 @@ sub update_access { } else { if ((@{$processing{'activate'}} > 0) || (@{$processing{'update'}} > 0)) { $errors .= ''. - &mt('A problem occurred storing access control settings: [_1]',$outcome). + &mt('A problem occurred saving access control settings: [_1]',$outcome). ''; } } @@ -1035,7 +1089,7 @@ sub update_access { &open_form($r,$url); foreach my $newitem ('course','domains','users') { if ($env{'form.new'.$newitem} > 0) { - $r->print('
    '.&mt('Add new [_1]-based access control for portfolio file: [_2]',$newitem,$env{'form.currentpath'}.$env{'form.selectfile'}).'

    '); + $r->print('
    '.&mt('Add new [_1]-based access control for portfolio file: [_2]',&mt($newitem),$env{'form.currentpath'}.$env{'form.selectfile'}).'

    '); $firstitem = $totalnew; $lastitem = $totalnew + $env{'form.new'.$newitem}; $totalnew = $lastitem; @@ -1055,7 +1109,7 @@ sub update_access { ); $r->print('
    '.&make_anchor($url, \%anchor_fields, &mt('Display all access settings for this file'))); delete $anchor_fields{'access'}; - $r->print('     '.&make_anchor($url,\%anchor_fields,&mt('Return to directory listing'))); + $r->print('     '.&make_anchor($url,\%anchor_fields,&mt('Return to directory'))); } return; } @@ -1203,7 +1257,7 @@ sub access_setting_table { sub standard_settings { my ($r,$now,$then,$url,$filename,$acl_count,$start,$end,$public,$publicnum, $publictext,$guest,$guestnum,$guesttext,$access_controls,%conditionals)=@_; - $r->print('

    '.&mt('Public access: [_1]',$publictext).'

    '); + $r->print('

    '.&mt('Public access: [_1]',&mt($publictext)).'

    '); $r->print(&Apache::loncommon::start_data_table()); $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('
    '.&mt('Action').''.&mt('Dates available').' '); - $r->print('

    '.&mt('Passphrase-protected access: [_1]',$guesttext).'

    '); + $r->print('

    '.&mt('Passphrase-protected access: [_1]',&mt($guesttext)).'

    '); $r->print(&Apache::loncommon::start_data_table()); $r->print(&Apache::loncommon::start_data_table_header_row()); $r->print('
    '.&mt('Action').''.&mt('Dates available'). @@ -1265,7 +1319,7 @@ sub standard_settings { 'action' => 'chgconditions', 'currentpath' => $env{'form.currentpath'}, ); - $r->print('

    '.&mt('Conditional access: [_1]',$conditionstext).'

    '); + $r->print('

    '.&mt('Conditional access: [_1]',&mt($conditionstext)).'

    '); if ($numconditionals > 0) { my $count = 1; my $chg = 'none'; @@ -1315,7 +1369,7 @@ sub access_element { my $title = $type; $title =~ s/s$//; $title =~ s/^(\w)/uc($1)/e; - $r->print('

    '.&mt('[_1]-based conditional access: ',$title)); + $r->print('

    '.&mt('[_1]-based conditional access: ',&mt($title))); if ($$acl_count{$type}) { $r->print($$acl_count{$type}.' '); if ($$acl_count{$type} > 1) { @@ -1347,7 +1401,7 @@ sub display_access_row { '



    '); } @@ -1530,13 +1584,13 @@ sub users_row { sub additional_item { my ($type) = @_; - my $output = &mt('Add new [_1] condition(s)?',$type).' '.&mt('Number to add: ').''; + my $output = &mt('Add new [_1] condition(s)?',&mt($type)).' '.&mt('Number to add: ').''; return $output; } sub actionbox { my ($status,$num,$scope) = @_; - my $output = '
    '. '