--- loncom/interface/portfolio.pm 2008/04/16 23:11:06 1.191
+++ loncom/interface/portfolio.pm 2010/06/20 03:13:46 1.224
@@ -1,7 +1,7 @@
# The LearningOnline Network
# portfolio browser
#
-# $Id: portfolio.pm,v 1.191 2008/04/16 23:11:06 raeburn Exp $
+# $Id: portfolio.pm,v 1.224 2010/06/20 03:13:46 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,7 +38,7 @@ use Apache::lonnet;
use Apache::longroup;
use Apache::lonhtmlcommon;
use HTML::Entities;
-use LONCAPA;
+use LONCAPA qw(:DEFAULT :match);
sub group_args {
my $output;
@@ -80,63 +80,76 @@ 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) {
my $groupitem = &group_form_data();
my $iconpath= $r->dir_config('lonIconsURL') . "/";
- my %text=&Apache::lonlocal::texthash(
- 'upload' => 'Upload',
- 'upload_label' =>
- 'Upload file to current directory:',
- 'createdir' => 'Create Subdirectory',
- 'createdir_label' =>
- 'Create subdirectory in current directory:');
+ my %lt=&Apache::lonlocal::texthash(
+ 'upload' => 'Upload',
+ 'upload_label' => 'Upload file to current directory',
+ 'createdir' => 'Create Subdirectory',
+ 'createdir_label' => 'Create subdirectory in current directory',
+ 'parse' => 'Upload embedded images/multimedia/css/linked files if HTML file',
+ );
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', &mt('Help on the portfolio')));
+ 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";
+
+
+
+
+ $lt{'parse'}
+
+
+END
+ }
+
+ $r->print('
'.$help_portfolio);
+ # Upload File
+ $r->print('
'
+ .''
+ .'
'
+ );
+ # Create Subdirectory
+ $r->print('
'
+ .''
+ .'
'
+ );
+ $r->print('
');
+ } # end "if can_upload"
- $r->print(<<"TABLE");
-
-
-
- $text{'upload_label'}
-
-
-
-
-
-
-
- $text{'createdir_label'}
-
-
-
-
-
-
-TABLE
- }
my @tree = split (/\//,$current_path);
my %anchor_fields = (
'selectfile' => $port_path,
@@ -145,6 +158,7 @@ TABLE
'fieldname' => $env{"form.fieldname"},
'continue' => $env{"form.continue"}
);
+ $r->print(' ');
$r->print(''.&make_anchor($url,\%anchor_fields,$port_path).'/');
if (@tree > 1){
my $newCurrentPath = '/';
@@ -170,17 +184,59 @@ 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".
+'
';
+ return &Apache::loncommon::head_subbox($disk_meter);
+}
+
sub display_directory_line {
my ($r,$select_mode, $filename, $mtime, $size, $css_class,
$line, $access_controls, $curr_access, $now, $version_flag,
$href_location, $url, $current_path, $access_admin_text, $versions)=@_;
my $fullpath = &prepend_group($current_path.$filename);
- $r->print('');
+ $r->print(&Apache::loncommon::start_data_table_row());
$r->print($line); # contains first two cells of table
my $lock_info;
if ($version_flag) { # versioned can't be versioned, so TRUE when root file
- $r->print(' ');
+ $r->print(' ');
$r->print(''.$version_flag.' ');
} else { # this is a graded or handed back file
my ($user,$domain) = &get_name_dom($env{'form.group'});
@@ -212,22 +268,25 @@ sub display_directory_line {
$r->print(''.$size.' ');
$r->print(''.&Apache::lonlocal::locallocaltime($mtime).' ');
if ($select_mode ne 'true') {
- $r->print(''.
- &mt($curr_access).' ');
+ $r->print(' '); # Display status
+ $r->print(''
+ .&mt($curr_access).' '
+ );
my %anchor_fields = (
'access' => $filename,
'currentpath' => $current_path
);
$r->print(&make_anchor($url, \%anchor_fields, $access_admin_text).' ');
+ } else {
+ $r->print(' '); # Display status
}
- $r->print(' '.$/);
+ $r->print(&Apache::loncommon::end_data_table_row().$/);
}
sub display_directory {
my ($r,$url,$current_path,$is_empty,$dir_list,$group,$can_upload,
$can_modify,$can_delete,$can_setacl)=@_;
my $iconpath= $r->dir_config('lonIconsURL') . "/";
- my $display_out;
my $select_mode;
my $checked_files;
my $port_path = &get_port_path();
@@ -244,40 +303,76 @@ sub display_directory {
my %access_controls = &Apache::lonnet::get_access_controls($current_permissions,$group);
my $now = time;
if ($env{"form.mode"} eq 'selectfile') {
- &select_files($r);
- $checked_files =&Apache::lonnet::files_in_path($uname,$env{'form.currentpath'});
- $select_mode = 'true';
- }
- if ($is_empty && ($current_path ne '/') && $can_delete) {
- $display_out = '';
-
- $r->print($display_out);
- return;
+ &select_files($r);
+ $checked_files =&Apache::lonnet::files_in_path($uname,$env{'form.currentpath'});
+ $select_mode = 'true';
}
if ($select_mode eq 'true') {
$r->print(''
@@ -653,7 +758,7 @@ sub rename {
} else {
&open_form($r,$url);
$r->print(''.&mt('Rename [_1] to [_2]?', &display_file()
- , ' ').'
');
+ , ' ').'');
&close_form($r,$url);
}
}
@@ -760,13 +865,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").' ';
}
@@ -799,7 +904,7 @@ sub display_access {
sub explain_conditionals {
return
&mt('Conditional files are accessible to logged-in users with accounts in the LON-CAPA network, who satisfy the conditions you set.').' '."\n".
- &mt('The conditions can include affiliation with a particular course, or a user account in a specific domain.').' '."\n".
+ &mt('The conditions can include affiliation with a particular course or community, or a user account in a specific domain.').' '."\n".
&mt('Alternatively access can be granted to people with specific LON-CAPA usernames and domains.');
}
@@ -840,7 +945,7 @@ sub build_access_summary {
guest => 'Passphrase-protected',
domains => 'Conditional: domain-based',
users => 'Conditional: user-based',
- course => 'Conditional: course-based',
+ course => 'Conditional: course/community-based',
);
my @allscopes = ('public','guest','domains','users','course');
foreach my $scope (@allscopes) {
@@ -865,11 +970,16 @@ sub build_access_summary {
}
}
$r->print(' '.&mt($scope_desc{$scope}));
+ my $crstype;
if ($scope eq 'course') {
if ($chg ne 'delete') {
my $cid = $content->{'domain'}.'_'.$content->{'number'};
my %course_description = &Apache::lonnet::coursedescription($cid);
$r->print(' ('.$course_description{'description'}.')');
+ $crstype = 'Course';
+ if ($course_description{'type'} ne '') {
+ $crstype = $course_description{'type'};
+ }
}
}
$r->print(' '.&mt('Start: ').$showstart.
@@ -889,8 +999,6 @@ sub build_access_summary {
foreach my $item ('role','access','section','group') {
$r->print(' ');
if ($item eq 'role') {
- my $ucscope = $scope;
- $ucscope =~ s/^(\w)/uc($1)/e;
my $role_output;
foreach my $role (@{$content->{'roles'}{$id}{$item}}) {
if ($role eq 'all') {
@@ -898,7 +1006,7 @@ sub build_access_summary {
} elsif ($role =~ /^cr/) {
$role_output .= (split('/',$role))[3].',';
} else {
- $role_output .= &Apache::lonnet::plaintext($role,$ucscope).',';
+ $role_output .= &Apache::lonnet::plaintext($role,$crstype).',';
}
}
$role_output =~ s/,$//;
@@ -1024,16 +1132,22 @@ sub update_access {
my $totalnew = 0;
my $status = 'new';
my ($firstitem,$lastitem);
- foreach my $newitem ('course','domains','users') {
+ my @types = ('course','domains','users');
+ foreach my $newitem (@types) {
$allnew += $env{'form.new'.$newitem};
}
if ($allnew > 0) {
my $now = time;
my $then = $now + (60*60*24*180); # six months approx.
&open_form($r,$url);
- foreach my $newitem ('course','domains','users') {
+ my %showtypes = &Apache::lonlocal::texthash (
+ course => 'course/community',
+ domains => 'domain',
+ users => 'user',
+ );
+ foreach my $newitem (@types) {
if ($env{'form.new'.$newitem} > 0) {
- $r->print(' '.&mt('Add new [_1]-based access control for portfolio file: [_2] ',&mt($newitem),$env{'form.currentpath'}.$env{'form.selectfile'}).' ');
+ $r->print(' '.&mt('Add new [_1]-based[_2] access control for portfolio file: [_3]',''.$showtypes{$newitem},' ',''.$env{'form.currentpath'}.$env{'form.selectfile'}.' ').' ');
$firstitem = $totalnew;
$lastitem = $totalnew + $env{'form.new'.$newitem};
$totalnew = $lastitem;
@@ -1276,7 +1390,7 @@ sub standard_settings {
&build_access_summary($r,$count,$chg,%conditionals);
$r->print(&Apache::loncommon::end_data_table());
} else {
- $r->print(&make_anchor($url,\%anchor_fields,&mt('Add conditional access')).' '.&mt('based on domain, username, or course affiliation.'));
+ $r->print(&make_anchor($url,\%anchor_fields,&mt('Add conditional access')).' '.&mt('based on domain, username, or course/community affiliation.'));
}
}
@@ -1310,10 +1424,12 @@ sub acl_status {
sub access_element {
my ($r,$type,$acl_count,$items,$access_controls,$now,$then) = @_;
- my $title = $type;
- $title =~ s/s$//;
- $title =~ s/^(\w)/uc($1)/e;
- $r->print(''.&mt('[_1]-based conditional access: ',&mt($title)));
+ my %typetext = &Apache::lonlocal::texthash(
+ domains => 'Domain',
+ users => 'User',
+ course => 'Course/Community'
+ );
+ $r->print(''.&mt('[_1]-based conditional access: ',$typetext{$type}));
if ($$acl_count{$type}) {
$r->print($$acl_count{$type}.' ');
if ($$acl_count{$type} > 1) {
@@ -1331,17 +1447,24 @@ sub access_element {
sub display_access_row {
my ($r,$status,$type,$items,$access_controls,$now,$then) = @_;
+ my $showtype;
+ if ($type eq 'course') {
+ $showtype = &mt('Courses/Communities');
+ } elsif ($type eq 'domains') {
+ $showtype = &mt('Domains');
+ } elsif ($type eq 'users') {
+ $showtype = &mt('Users');
+ }
if (@{$items} > 0) {
my @all_doms;
my $colspan = 3;
- my $uctype = $type;
- $uctype =~ s/^(\w)/uc($1)/e;
$r->print(&Apache::loncommon::start_data_table());
$r->print(&Apache::loncommon::start_data_table_header_row());
- $r->print(''.&mt('Action?').' '.&mt($uctype).' '.
+ $r->print(' '.&mt('Action?').' '.$showtype.' '.
&mt('Dates available').' ');
if ($type eq 'course' && $status eq 'old') {
- $r->print(''.&mt('Allowed [_1] member affiliations',$type).
+
+ $r->print(' '.&mt('Allowed course/community affiliations').
' ');
$colspan ++;
} elsif ($type eq 'domains') {
@@ -1368,8 +1491,8 @@ sub display_access_row {
}
$r->print(&Apache::loncommon::end_data_table());
} else {
- $r->print(&mt('No [_1]-based conditions defined.',&mt($type)).' '
- .&additional_item($type));
+ $r->print(&mt('No [_1]-based conditions defined.',$showtype).' '.
+ &additional_item($type));
}
return;
}
@@ -1430,17 +1553,20 @@ sub course_row {
}
my $js = &Apache::loncommon::coursebrowser_javascript($defdom)
.&course_js();
- my $uctype = $type;
- $uctype =~ s/^(\w)/uc($1)/e;
+ my $showtype = &mt('Course/Community');
+ my $crstype = 'Course';
my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,
$type);
$r->print(''.$js.&actionbox($status,$num,$scope).' ');
if ($status eq 'old') {
my $cid = $content->{'domain'}.'_'.$content->{'number'};
my %course_description = &Apache::lonnet::coursedescription($cid);
+ if ($course_description{'type'} ne '') {
+ $crstype = $course_description{'type'};
+ }
$r->print(' '.$course_description{'description'}.' ');
} elsif ($status eq 'new') {
- $r->print(''.&Apache::loncommon::selectcourse_link('portform','crsnum_'.$num,'crsdom_'.$num,'description_'.$num,$num.'_1',undef,$uctype).' ');
+ $r->print(''.&Apache::loncommon::selectcourse_link('portform','crsnum_'.$num,'crsdom_'.$num,'description_'.$num,$num.'_1',undef,$showtype).' ');
}
$r->print(''.&dateboxes($num,$start,$end));
my $newrole_id = 1;
@@ -1458,19 +1584,19 @@ sub course_row {
$max_id = $role_id;
}
$max_id ++;
- my $role_selects = &role_selectors($num,$role_id,$type,$content,'display');
- $r->print(' '.&mt('Delete').' '.$role_selects.' ');
+ my $role_selects = &role_selectors($num,$role_id,$crstype,$content,'display');
+ $r->print(' '.&mt('Delete').' '.$role_selects.' ');
}
$r->print('');
}
$r->print(' '.&mt('Add a roles-based condition').
- ' {'domain'}','$content->{'number'}',
- '$uctype'".')" value="" />');
+ '$showtype'".')" value="" />');
$newrole_id = $max_id;
} else {
- $r->print(' ');
+ $r->print(' ');
}
$r->print(&add_course_role($num,$newrole_id));
$r->print(' ');
@@ -1491,14 +1617,14 @@ sub domains_row {
my ($r,$status,$item,$all_doms,$access_controls,$now,$then) = @_;
my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,
'domains');
- my $dom_select = ''.
+ my $dom_select = ''.
' '.&mt('Please select').' ';
if ($status eq 'old') {
my $content = $$access_controls{$item};
foreach my $dom (@{$all_doms}) {
if ((@{$content->{'dom'}} > 0)
&& (grep(/^\Q$dom\E$/,@{$content->{'dom'}}))) {
- $dom_select .= ''.
+ $dom_select .= ' '.
$dom.' ';
} else {
$dom_select .= ''.$dom.' ';
@@ -1528,13 +1654,21 @@ sub users_row {
sub additional_item {
my ($type) = @_;
- my $output = &mt('Add new [_1] condition(s)?',&mt($type)).' '.&mt('Number to add: ').' ';
+ my $showtype;
+ if ($type eq 'course') {
+ $showtype = &mt('course/community');
+ } elsif ($type eq 'domains') {
+ $showtype = &mt('domains');
+ } elsif ($type eq 'users') {
+ $showtype = &mt('users');
+ }
+ my $output = &mt('Add new [_1] condition(s)?',$showtype).' '.&mt('Number to add: ').' ';
return $output;
}
sub actionbox {
my ($status,$num,$scope) = @_;
- my $output = '';
+ my $output = '';
if ($status eq 'new') {
my $checkstate;
if ($scope eq 'domains' || $scope eq 'users' || $scope eq 'course') {
@@ -1545,7 +1679,7 @@ sub actionbox {
&mt('Activate');
} else {
$output .= ' '.&mt('Delete').' '.
+ '" />'.&mt('Delete').' '.
' '.&mt('Update');
}
@@ -1564,7 +1698,7 @@ sub dateboxes {
undef,undef,1);
my $enddate = &Apache::lonhtmlcommon::date_setter('portform',
'enddate_'.$num,$end,undef,undef,undef,1,undef,
- undef,undef,1). ' '.
+ undef,undef,1). ' '.
' '.&mt('No end date').
' ';
@@ -1599,10 +1733,12 @@ sub role_selectors {
$cdom = $env{'form.cdom'};
$cnum = $env{'form.cnum'};
}
- my $uctype = $type;
- $uctype =~ s/^(\w)/uc($1)/e;
+ my $crstype = 'Course';
+ if ($cnum =~ /^$match_community$/) {
+ $crstype = 'Community'
+ }
my ($sections,$groups,$allroles,$rolehash,$accesshash) =
- &Apache::loncommon::get_secgrprole_info($cdom,$cnum,1,$uctype);
+ &Apache::loncommon::get_secgrprole_info($cdom,$cnum,1,$crstype);
if (!@{$sections}) {
@{$sections} = ('none');
} else {
@@ -1635,12 +1771,12 @@ sub role_selectors {
'group' => $groups,
);
foreach my $item ('role','access','section','group') {
- $output .= ''."\n";
+ $output .= ''."\n";
foreach my $entry (@{$allitems{$item}}) {
if ($caller eq 'display') {
if ((@{$$content{'roles'}{$role_id}{$item}} > 0) &&
(grep(/^\Q$entry\E$/,@{$$content{'roles'}{$role_id}{$item}}))) {
- $output .= ' '.
+ $output .= ' '.
$lookup{$item}{$entry}.' ';
next;
}
@@ -1697,8 +1833,23 @@ function getIndexByName(item) {
END_SCRIPT
- $r->print(&mt('Select roles, course status, section(s) and group(s) for users who will be able to access the portfolio file.'));
- $r->print(''.&mt('Roles').' '.&mt('[_1] status',$type).' '.&mt('Sections').' '.&mt('Groups').' '.$role_selects.'
');
+ $r->print(
+ ''
+ .&mt('Select roles, '.lc($type).' status, section(s) and group(s) for users'
+ .' who will be able to access the portfolio file.')
+ .'
'
+ );
+ $r->print(
+ ''
+ .''
+ .''.&mt('Roles').' '
+ .''.&mt("$type status").' '
+ .''.&mt('Sections').' '
+ .''.&mt('Groups').' '
+ .' '.$role_selects.' '
+ .'
'
+ .' '
+ );
return;
}
@@ -1738,15 +1889,28 @@ ENDSMP
ENDSMP
$r->print($javascript);
- $r->print("".&mt('Select portfolio files')." ".
- &mt('Check as many as you wish in response to the problem.')." ");
+ $r->print("".&mt('Select portfolio files')." ");
my @otherfiles=&Apache::lonnet::files_not_in_path($env{'user.name'}, $env{'form.currentpath'});
if (@otherfiles) {
- $r->print("".&mt('Files selected from other directories:')." ");
+ $r->print(&Apache::loncommon::start_data_table()
+ .&Apache::loncommon::start_data_table_header_row()
+ .''.&mt('Files selected from other directories:')." "
+ .&Apache::loncommon::end_data_table_header_row()
+ );
foreach my $file (@otherfiles) {
- $r->print($file." ");
+ $r->print(&Apache::loncommon::start_data_table_row()
+ .''.$file." "
+ .&Apache::loncommon::end_data_table_row()
+ );
}
+ $r->print(&Apache::loncommon::end_data_table()
+ .' '
+ );
}
+ $r->print(''
+ .&mt('Check as many files as you wish in response to the problem:')
+ .'
'
+ );
}
@@ -1769,7 +1933,8 @@ sub check_for_upload {
$found_file = 1;
if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
$locked_file = 1;
- }
+ }
+ last;
}
}
my $getpropath = 1;
@@ -1801,10 +1966,17 @@ sub check_for_upload {
sub upload {
my ($r,$url,$group)=@_;
my $fname=&Apache::lonnet::clean_filename($env{'form.uploaddoc.filename'});
-
- my ($state,$msg) = &check_for_upload($env{'form.currentpath'},
- $fname,$group,'uploaddoc');
-
+ my $disk_quota = &get_quota($group);
+ my $portfolio_root = &get_portfolio_root();
+ my $port_path = &get_port_path();
+ my ($uname,$udom) = &get_name_dom($group);
+ my $getpropath = 1;
+ my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,$portfolio_root,$getpropath);
+ my ($state,$msg) =
+ &Apache::loncommon::check_for_upload($env{'form.currentpath'},$fname,
+ $group,'uploaddoc',$portfolio_root,
+ $port_path,$disk_quota,
+ $current_disk_usage,$uname,$udom);
if ($state eq 'will_exceed_quota'
|| $state eq 'file_locked'
|| $state eq 'file_exists' ) {
@@ -1812,11 +1984,11 @@ sub upload {
return;
}
- my $port_path = &get_port_path();
my (%allfiles,%codebase,$mode);
if ($env{'form.uploaddoc.filename'} =~ m/(\.htm|\.html|\.shtml)$/i) {
- $mode = 'parse';
-
+ if ($env{'form.parserflag'}) {
+ $mode = 'parse';
+ }
}
my $result=
&Apache::lonnet::userfileupload('uploaddoc','',
@@ -1828,73 +2000,27 @@ sub upload {
$r->print(&done('Back',$url));
} else {
if (%allfiles) {
- my $state = <
STATE
- $r->print("".&mt("Reference Warning")." ");
- $r->print("".&mt("Completed upload of the file. This file contained references to other files. You must upload the referenced files or else the uploaded file may not work properly.")."
");
- $r->print("".&mt("Please select the locations from which the referenced files are to be uploaded.")."
");
- $r->print(&Apache::londocs::ask_for_embedded_content('/adm/portfolio',$state,\%allfiles,\%codebase,
+ $r->print("".&mt("Reference Warning")." ");
+ $r->print("".&mt("Completed upload of the file. This file contained references to other files. You must upload the referenced files or else the uploaded file may not work properly.")."
");
+ $r->print("".&mt("Please select the locations from which the referenced files are to be uploaded.")."
");
+ $r->print(&Apache::loncommon::ask_for_embedded_content('/adm/portfolio',$state,\%allfiles,\%codebase,
{'error_on_invalid_names' => 1,
'ignore_remote_references' => 1,}));
- $r->print('Or '.&done('Return to directory',$url).'
');
+ $r->print('Or '.&done('Return to directory',$url).'
');
+ }
} else {
$r->print(&done(undef,$url));
}
}
}
-sub upload_embedded {
- my ($r,$url,$group)=@_;
- for (my $i=0; $i<$env{'form.number_embedded_items'}; $i++) {
- next if (!exists($env{'form.embedded_item_'.$i.'.filename'}));
- my $orig_uploaded_filename =
- $env{'form.embedded_item_'.$i.'.filename'};
-
- $env{'form.embedded_orig_'.$i} =
- &unescape($env{'form.embedded_orig_'.$i});
- my ($path,$fname) =
- ($env{'form.embedded_orig_'.$i} =~ m{(.*/)([^/]*)});
- # no path, whole string is fname
- if (!$fname) { $fname = $env{'form.embedded_orig_'.$i} };
-
- $path = $env{'form.currentpath'}.$path;
- $fname = &Apache::lonnet::clean_filename($fname);
-
- my ($state,$msg) = &check_for_upload($path,$fname,$group,
- 'embedded_item_'.$i);
-
- if ($state eq 'will_exceed_quota'
- || $state eq 'file_locked'
- || $state eq 'file_exists' ) {
- $r->print($msg);
- next;
- }
-
- my $port_path = &get_port_path();
- my $src_path = $env{'form.embedded_orig_'.$i};
- $env{'form.embedded_item_'.$i.'.filename'}=$fname;
-
- my $result=
- &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
- $port_path.$path);
- if ($result !~ m|^/uploaded/|) {
- $r->print(''
- .&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
- ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})
- .' ');
- next;
- } else {
- $r->print(" Uploaded ".
- &display_file($port_path.$path,$fname).'
');
- }
- }
- $r->print(&done(undef,$url));
-}
-
sub lock_info {
my ($r,$url,$group) = @_;
my ($uname,$udom) = &get_name_dom($group);
@@ -2082,7 +2208,7 @@ sub missing_priv {
$r->print(&mt('You do not have sufficient privileges to [_1] ',
$longtext->{$priv}));
if (defined($env{'form.group'})) {
- $r->print(&mt("in the group's file repository."));
+ $r->print(&mt("in the group's group portfolio."));
$rtnlink .= &group_args()
} else {
$r->print(&mt('in this portfolio.'));
@@ -2134,6 +2260,17 @@ sub get_quota {
return $disk_quota;
}
+sub suppress_embed_prompt {
+ my $suppress_prompt = 0;
+ if (($env{'request.role'} =~ /^st/) && ($env{'request.course.id'} ne '')) {
+ if ($env{'course.'.$env{'request.course.id'}.'.suppress_embed_prompt'} eq 'yes') {
+ $suppress_prompt = 1;
+ }
+ }
+ return $suppress_prompt;
+}
+
+
sub handler {
# this handles file management
my $r = shift;
@@ -2179,7 +2316,7 @@ sub handler {
$r->print(&mt('Not a valid group for this course'));
$earlyout = 1;
}
- $title = &mt('Group files for [_1]', $group);
+ $title = &mt('Group portfolio for [_1]', $group);
} else {
$r->print(&mt('Invalid group'));
$earlyout = 1;
@@ -2207,7 +2344,7 @@ sub handler {
} else {
($uname,$udom) = &get_name_dom();
$portfolio_root = &get_portfolio_root();
- $title = &mt('Portfolio Manager');
+ $title = &mt('My Space');
$can_modify = 1;
$can_delete = 1;
$can_upload = 1;
@@ -2219,14 +2356,28 @@ sub handler {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
# Give the LON-CAPA page header
+ my $brcrum = [{href=>"/adm/portfolio",text=>"Portfolio Manager"}];
+
if ($env{"form.mode"} eq 'selectfile'){
$r->print(&Apache::loncommon::start_page($title,undef,
{'only_body' => 1}));
} elsif ($env{'form.action'} eq 'rolepicker') {
$r->print(&Apache::loncommon::start_page('New role-based condition',undef,
{'no_nav_bar' => 1, }));
- } else {
+ } elsif ($caller eq 'coursegrp_portfolio') {
$r->print(&Apache::loncommon::start_page($title));
+ } else {
+ $r->print(&Apache::loncommon::start_page($title,undef,
+ {'bread_crumbs' => $brcrum}));
+ if (!&Apache::lonnet::usertools_access($uname,$udom,'portfolio')) {
+ $r->print(''.&mt('No user portfolio available') .' '.
+ &mt('This is a result of one of the following:').''.
+ ''.&mt('The administrator of this domain has disabled portfolio functionality for this specific user.').' '.
+ ''.&mt('The domain has been configured to disable, by default, portfolio functionality for all users in the domain.').' '.
+ ' ');
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+ }
}
$r->rflush();
my ($blocked,$blocktext) =
@@ -2258,7 +2409,14 @@ sub handler {
}
} elsif ($env{'form.action'} eq 'upload_embedded') {
if ($can_upload) {
- &upload_embedded($r,$url,$group);
+ my $disk_quota = &get_quota($group);
+ my $getpropath = 1;
+ my $current_disk_usage =
+ &Apache::lonnet::diskusage($udom,$uname,$portfolio_root,$getpropath);
+ $r->print(
+ &Apache::loncommon::upload_embedded('portfolio',$port_path,$uname,$udom,
+ $group,$portfolio_root,$group,$disk_quota,$current_disk_usage));
+ $r->print(&done(undef,$url));
} else {
&missing_priv($r,$url,'upload');
}
@@ -2336,7 +2494,7 @@ sub handler {
&Apache::lonhtmlcommon::clear_breadcrumbs();
$r->print(&coursegrp_portfolio_header($udom,$uname,$grp_desc));
}
- my @dir_list=&get_dir_list($portfolio_root,undef,$group);
+ my @dir_list=&get_dir_list($portfolio_root,$current_path,$group);
if ($dir_list[0] eq 'no_such_dir'){
# two main reasons for this:
# 1) never been here, so directory structure not created
@@ -2352,14 +2510,12 @@ sub handler {
$current_path = '/'; # force it back to the root
}
# now grab the directory list again, for the first time
- @dir_list=
- &Apache::lonnet::dirlist($portfolio_root.$current_path,
- $udom,$uname,$getpropath);
+ @dir_list=&get_dir_list($portfolio_root,$current_path,$group);
}
# need to know if directory is empty so it can be removed if desired
my $is_empty=(@dir_list == 2);
&display_common($r,$url,$current_path,$is_empty,\@dir_list,
- $can_upload);
+ $can_upload,$group);
&display_directory($r,$url,$current_path,$is_empty,\@dir_list,$group,
$can_upload,$can_modify,$can_delete,$can_setacl);
$r->print(&Apache::loncommon::end_page());
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.