--- loncom/interface/londocs.pm 2023/01/20 16:30:43 1.484.2.93.2.8
+++ loncom/interface/londocs.pm 2013/03/13 00:10:13 1.535
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.484.2.93.2.8 2023/01/20 16:30:43 raeburn Exp $
+# $Id: londocs.pm,v 1.535 2013/03/13 00:10:13 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,13 +41,9 @@ use Apache::lonclonecourse;
use Apache::lonnavmaps;
use Apache::lonnavdisplay();
use Apache::lonextresedit();
-use Apache::lontemplate();
-use Apache::lonsimplepage();
-use Apache::loncourserespicker();
use HTML::Entities;
use HTML::TokeParser;
use GDBM_File;
-use File::MMagic;
use Apache::lonlocal;
use Cwd;
use LONCAPA qw(:DEFAULT :match);
@@ -60,7 +56,6 @@ my $hashtied;
my %alreadyseen=();
my $hadchanges;
-my $suppchanges;
my %help=();
@@ -84,11 +79,7 @@ sub storemap {
$map,1,$report);
if ($errtext) { return ($errtext,2); }
- if ($map =~ /^default/) {
- $hadchanges=1;
- } else {
- $suppchanges=1;
- }
+ $hadchanges=1;
return ($errtext,0);
}
@@ -140,108 +131,13 @@ sub clean {
return $title;
}
-sub default_folderpath {
- my ($coursenum,$coursedom,$navmapref) = @_;
- return unless ($coursenum && $coursedom && ref($navmapref));
-# Check if entire course is hidden and/or encrypted
- my ($hiddenmap,$encryptmap,$folderpath,$hiddentop);
- my $toplevel = "uploaded/$coursedom/$coursenum/default.sequence";
- unless (ref($$navmapref)) {
- $$navmapref = Apache::lonnavmaps::navmap->new();
- }
- if (ref($$navmapref)) {
- if (lc($$navmapref->get_mapparam(undef,$toplevel,"0.hiddenresource")) eq 'yes') {
- my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) };
- my @resources = $$navmapref->retrieveResources($toplevel,$filterFunc,1,1);
- unless (@resources) {
- $hiddenmap = 1;
- unless ($env{'request.role.adv'}) {
- $hiddentop = 1;
- if ($env{'form.folder'}) {
- undef($env{'form.folder'});
- }
- }
- }
- }
- if (lc($$navmapref->get_mapparam(undef,$toplevel,"0.encrypturl")) eq 'yes') {
- $encryptmap = 1;
- }
- }
- unless ($hiddentop) {
- $folderpath='default&'.&escape(&mt('Main Content')).
- '::'.$hiddenmap.':'.$encryptmap.'::';
- }
- if (wantarray) {
- return ($folderpath,$hiddentop);
- } else {
- return $folderpath;
- }
-}
-
-sub validate_folderpath {
- my ($supplementalflag) = @_;
- if ($env{'form.folderpath'} ne '') {
- my @items = split(/\&/,$env{'form.folderpath'});
- my $badpath;
- for (my $i=0; $i<@items; $i++) {
- my $odd = $i%2;
- if (($odd) && (!$supplementalflag) && ($items[$i] !~ /^[^:]*:(|\d+):(|1):(|1):(|1):(|1)$/)) {
- $badpath = 1;
- } elsif ((!$odd) && ($items[$i] !~ /^(default|supplemental)(|_\d+)$/)) {
- $badpath = 1;
- }
- last if ($badpath);
- }
- if ($badpath) {
- delete($env{'form.folderpath'});
- }
- }
- return;
-}
-sub validate_suppath {
- if ($env{'form.supppath'} ne '') {
- my @items = split(/\&/,$env{'form.supppath'});
- my $badpath;
- for (my $i=0; $i<@items; $i++) {
- my $odd = $i%2;
- if ((!$odd) && ($items[$i] !~ /^supplemental(|_\d+)$/)) {
- $badpath = 1;
- }
- last if ($badpath);
- }
- if ($badpath) {
- delete($env{'form.supppath'});
- }
- }
- return;
-}
sub dumpcourse {
my ($r) = @_;
my $crstype = &Apache::loncommon::course_type();
- my ($starthash,$js);
- unless (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) {
- $js = <<"ENDJS";
-
-ENDJS
- $starthash = {
- add_entries => {'onload' => "hide_searching();"},
- };
- }
- $r->print(&Apache::loncommon::start_page('Copy '.$crstype.' Content to Authoring Space',$js,$starthash)."\n".
- &Apache::lonhtmlcommon::breadcrumbs('Copy '.$crstype.' Content to Authoring Space')."\n");
+ $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Content to Authoring Space')."\n".
+ &Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' Content to Authoring Space')."\n");
$r->print(&startContentScreen('tools'));
my ($home,$other,%outhash)=&authorhosts();
unless ($home) {
@@ -260,409 +156,120 @@ ENDJS
$r->print('
'.&mt('Copying Files').'
');
my $title=$env{'form.authorfolder'};
$title=&clean($title);
- my ($navmap,$errormsg) =
- &Apache::loncourserespicker::get_navmap_object($crstype,'dumpdocs');
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my (%maps,%resources,%titles);
- if (!ref($navmap)) {
- $r->print($errormsg.
- &endContentScreen());
- return '';
- } else {
- &Apache::loncourserespicker::enumerate_course_contents($navmap,\%maps,\%resources,\%titles,
- 'dumpdocs',$cdom,$cnum);
- }
- my @todump = &Apache::loncommon::get_env_multiple('form.archive');
- my (%tocopy,%replacehash,%lookup,%deps,%display,%result,%depresult,%simpleproblems,%simplepages,
- %newcontent,%has_simpleprobs);
- foreach my $item (sort {$a <=> $b} (@todump)) {
- my $name = $env{'form.namefor_'.$item};
- if ($resources{$item}) {
- my ($map,$id,$res) = &Apache::lonnet::decode_symb($resources{$item});
- if ($res =~ m{^uploaded/$cdom/$cnum/\E((?:docs|supplemental)/.+)$}) {
- $tocopy{$1} = $name;
- $display{$item} = $1;
- $lookup{$1} = $item;
- } elsif ($res eq 'lib/templates/simpleproblem.problem') {
- $simpleproblems{$item} = {
- symb => $resources{$item},
- name => $name,
- };
- $display{$item} = 'simpleproblem_'.$name;
- if ($map =~ m{^\Quploaded/$cdom/$cnum/\E(.+)$}) {
- $has_simpleprobs{$1}{$id} = $item;
- }
- } elsif ($res =~ m{^adm/$match_domain/$match_username/(\d+)/smppg}) {
- my $marker = $1;
- my $db_name = &Apache::lonsimplepage::get_db_name($res,$marker,$cdom,$cnum);
- $simplepages{$item} = {
- res => $res,
- title => $titles{$item},
- db => $db_name,
- marker => $marker,
- symb => $resources{$item},
- name => $name,
- };
- $display{$item} = '/'.$res;
- }
- } elsif ($maps{$item}) {
- if ($maps{$item} =~ m{^\Quploaded/$cdom/$cnum/\E((?:default|supplemental)_\d+\.(?:sequence|page))$}) {
- $tocopy{$1} = $name;
- $display{$item} = $1;
- $lookup{$1} = $item;
- }
- } else {
- next;
- }
- }
+ my %replacehash=();
+ foreach my $key (keys(%env)) {
+ if ($key=~/^form\.namefor\_(.+)/) {
+ $replacehash{$1}=$env{$key};
+ }
+ }
my $crs='/uploaded/'.$env{'request.course.id'}.'/';
$crs=~s/\_/\//g;
- my $mm = new File::MMagic;
- my $prefix = "/uploaded/$cdom/$cnum/";
- %replacehash = %tocopy;
- foreach my $item (sort(keys(%simpleproblems))) {
- my $content = &Apache::imsexport::simpleproblem($simpleproblems{$item}{'symb'});
- $newcontent{$display{$item}} = $content;
- }
- my $gateway = Apache::lonhtmlgateway->new('web');
- foreach my $item (sort(keys(%simplepages))) {
- if (ref($simplepages{$item}) eq 'HASH') {
- my $pagetitle = $simplepages{$item}{'title'};
- my %fields = &Apache::lonnet::dump($simplepages{$item}{'db'},$cdom,$cnum);
- my %contents;
- foreach my $field (keys(%fields)) {
- if ($field =~ /^(?:aaa|bbb|ccc)_(\w+)$/) {
- my $name = $1;
- my $msg = $fields{$field};
- if ($name eq 'webreferences') {
- if ($msg =~ m{^https?://}) {
- $contents{$name} = ''.$msg.'';
- }
- } else {
- $msg = &Encode::decode('utf8',$msg);
- $msg = $gateway->process_outgoing_html($msg,1);
- $contents{$name} = $msg;
- }
- } elsif ($field eq 'uploaded.photourl') {
- my $marker = $simplepages{$item}{marker};
- if ($fields{$field} =~ m{^\Q$prefix\E(simplepage/$marker/.+)$}) {
- my $filepath = $1;
- my ($relpath,$fname) = ($filepath =~ m{^(.+/)([^/]+)$});
- if ($fname ne '') {
- $fname=~s/\.(\w+)$//;
- my $ext=$1;
- $fname = &clean($fname);
- $fname.='.'.$ext;
- $contents{image} = '';
- $replacehash{$filepath} = $relpath.$fname;
- $deps{$item}{$filepath} = 1;
- }
- }
- }
- }
- $replacehash{'/'.$simplepages{$item}{'res'}} = $simplepages{$item}{'name'};
- $lookup{'/'.$simplepages{$item}{'res'}} = $item;
- my $content = '
-
-
-'.$pagetitle.'
-
-';
- if ($contents{title}) {
- $content .= "\n".''.$contents{title}.'
';
- }
- if ($contents{image}) {
- $content .= "\n".$contents{image};
- }
- if ($contents{content}) {
- $content .= '
-
-
'.&mt('Content').'
'.
-$contents{content}.'
-';
- }
- if ($contents{webreferences}) {
- $content .= '
-
-
'.&mt('Web References').'
'.
-$contents{webreferences}.'
-';
- }
- $content .= '
-
-
-';
- $newcontent{'/'.$simplepages{$item}{res}} = $content;
- }
- }
- foreach my $item (keys(%tocopy)) {
- unless ($item=~/\.(sequence|page)$/) {
- my $currurlpath = $prefix.$item;
- my $currdirpath = &Apache::lonnet::filelocation('',$currurlpath);
- &recurse_html($mm,$prefix,$currdirpath,$currurlpath,$item,$lookup{$item},\%replacehash,\%deps);
- }
- }
- foreach my $num (sort {$a <=> $b} (@todump)) {
- my $src = $display{$num};
- next if ($src eq '');
- my @needcopy = ();
- if ($replacehash{$src}) {
- push(@needcopy,$src);
- if (ref($deps{$num}) eq 'HASH') {
- foreach my $dep (sort(keys(%{$deps{$num}}))) {
- if ($replacehash{$dep}) {
- push(@needcopy,$dep);
- }
- }
- }
- } elsif ($src =~ /^simpleproblem_/) {
- push(@needcopy,$src);
- }
- next if (@needcopy == 0);
- my ($result,$depresult);
- for (my $i=0; $i<@needcopy; $i++) {
- my $item = $needcopy[$i];
- my $newfilename;
- if ($simpleproblems{$num}) {
- $newfilename=$title.'/'.$simpleproblems{$num}{'name'};
- } else {
- $newfilename=$title.'/'.$replacehash{$item};
- }
- $newfilename=~s/\.(\w+)$//;
- my $ext=$1;
- $newfilename=&clean($newfilename);
- $newfilename.='.'.$ext;
- my ($newrelpath) = ($newfilename =~ m{^\Q$title/\E(.+)$});
- if ($newrelpath ne $replacehash{$item}) {
- $replacehash{$item} = $newrelpath;
- }
- my @dirs=split(/\//,$newfilename);
- my $path=$r->dir_config('lonDocRoot')."/priv/$cd/$ca";
- my $makepath=$path;
- my $fail;
- my $origin;
- for (my $i=0;$i<$#dirs;$i++) {
- $makepath.='/'.$dirs[$i];
- unless (-e $makepath) {
- unless(mkdir($makepath,0755)) {
- $fail = &mt('Directory creation failed.');
- }
- }
- }
- if ($i == 0) {
- $result = '
'.$item.' => '.$newfilename.': ';
- } else {
- $depresult .= ''.$item.' => '.$newfilename.' '.
- ''.
- &mt('(dependency)').': ';
- }
- if (-e $path.'/'.$newfilename) {
- $fail = &mt('Destination already exists -- not overwriting.');
- } else {
- if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
- if (($item =~ m{^/adm/$match_domain/$match_username/\d+/smppg}) ||
- ($item =~ /^simpleproblem_/)) {
- print $fh $newcontent{$item};
- } else {
- my $fileloc = &Apache::lonnet::filelocation('',$prefix.$item);
- if (-e $fileloc) {
- if ($item=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
- if ((($1 eq 'sequence') || ($1 eq 'page')) &&
- (ref($has_simpleprobs{$item}) eq 'HASH')) {
- my %changes = %{$has_simpleprobs{$item}};
- my $content = &Apache::lonclonecourse::rewritefile(
- &Apache::lonclonecourse::readfile($env{'request.course.id'},$item),
- (%replacehash,$crs => '')
- );
- my $updatedcontent = '';
- my $parser = HTML::TokeParser->new(\$content);
- $parser->attr_encoded(1);
- while (my $token = $parser->get_token) {
- if ($token->[0] eq 'S') {
- if (($token->[1] eq 'resource') &&
- ($token->[2]->{'src'} eq '/res/lib/templates/simpleproblem.problem') &&
- ($changes{$token->[2]->{'id'}})) {
- my $id = $token->[2]->{'id'};
- $updatedcontent .= '<'.$token->[1];
- foreach my $attrib (@{$token->[3]}) {
- next unless ($attrib =~ /^(src|type|title|id)$/);
- if ($attrib eq 'src') {
- my ($file) = ($display{$changes{$id}} =~ /^\Qsimpleproblem_\E(.+)$/);
- if ($file) {
- $updatedcontent .= ' '.$attrib.'="'.$file.'"';
- } else {
- $updatedcontent .= ' '.$attrib.'="'.$token->[2]->{$attrib}.'"';
- }
- } else {
- $updatedcontent .= ' '.$attrib.'="'.$token->[2]->{$attrib}.'"';
- }
- }
- $updatedcontent .= ' />'."\n";
- } else {
- $updatedcontent .= $token->[4]."\n";
- }
- } else {
- $updatedcontent .= $token->[2];
- }
- }
- print $fh $updatedcontent;
- } else {
- print $fh &Apache::lonclonecourse::rewritefile(
- &Apache::lonclonecourse::readfile($env{'request.course.id'},$item),
- (%replacehash,$crs => '')
- );
- }
- } else {
- print $fh
- &Apache::lonclonecourse::readfile($env{'request.course.id'},$item);
- }
- } else {
- $fail = &mt('Source does not exist.');
- }
- }
- $fh->close();
- } else {
- $fail = &mt('Could not write to destination.');
- }
- }
- my $text;
- if ($fail) {
- $text = ''.&mt('fail').(' 'x3).$fail.'';
- } else {
- $text = ''.&mt('ok').'';
- }
- if ($i == 0) {
- $result .= $text;
- } else {
- $depresult .= $text.'';
- }
- }
- $r->print($result);
- if ($depresult) {
- $r->print('');
- }
- }
+ foreach my $item (keys(%replacehash)) {
+ my $newfilename=$title.'/'.$replacehash{$item};
+ $newfilename=~s/\.(\w+)$//;
+ my $ext=$1;
+ $newfilename=&clean($newfilename);
+ $newfilename.='.'.$ext;
+ my @dirs=split(/\//,$newfilename);
+ my $path=$r->dir_config('lonDocRoot')."/priv/$cd/$ca";
+ my $makepath=$path;
+ my $fail=0;
+ for (my $i=0;$i<$#dirs;$i++) {
+ $makepath.='/'.$dirs[$i];
+ unless (-e $makepath) {
+ unless(mkdir($makepath,0777)) { $fail=1; }
+ }
+ }
+ $r->print('
'.$item.' => '.$newfilename.': ');
+ if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
+ if ($item=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
+ print $fh &Apache::lonclonecourse::rewritefile(
+ &Apache::lonclonecourse::readfile($env{'request.course.id'},$item),
+ (%replacehash,$crs => '')
+ );
+ } else {
+ print $fh
+ &Apache::lonclonecourse::readfile($env{'request.course.id'},$item);
+ }
+ $fh->close();
+ } else {
+ $fail=1;
+ }
+ if ($fail) {
+ $r->print(''.&mt('fail').'');
+ } else {
+ $r->print(''.&mt('ok').'');
+ }
+ }
} else {
- my ($navmap,$errormsg) =
- &Apache::loncourserespicker::get_navmap_object($crstype,'dumpdocs');
- if (!ref($navmap)) {
- $r->print($errormsg);
- } else {
- $r->print(''.&mt('Searching ...').'
');
- $r->rflush();
- my ($preamble,$formname);
- $formname = 'dumpdoc';
- unless ($home==1) {
- $preamble = ''.
- '
'."\n";
- }
- my $title=$origcrsdata{'description'};
- $title=~s/[\/\s]+/\_/gs;
- $title=&clean($title);
- $preamble .= ''.
- '
'."\n";
- my %uploadedfiles;
- &tiehash();
- foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) {
- my ($ext)=($file=~/\.(\w+)$/);
-# FIXME Check supplemental here
- my $title=$hash{'title_'.$hash{
- 'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$file}};
- if (!$title) {
- $title=$file;
- } else {
- $title=~s|/|_|g;
- }
- $title=~s/\.(\w+)$//;
- $title=&clean($title);
- $title.='.'.$ext;
-# $r->print("\n | "
- $uploadedfiles{$file} = $title;
- }
- &untiehash();
- $r->print(&Apache::loncourserespicker::create_picker($navmap,'dumpdocs',$formname,$crstype,undef,
- undef,undef,$preamble,$home,\%uploadedfiles));
- }
+ $r->print(&mt('Searching ...').'
');
+ $r->rflush();
+# Input form
+ $r->print('');
}
$r->print(&endContentScreen());
}
-sub recurse_html {
- my ($mm,$prefix,$currdirpath,$currurlpath,$container,$item,$replacehash,$deps) = @_;
- return unless ((ref($replacehash) eq 'HASH') && (ref($deps) eq 'HASH'));
- my (%allfiles,%codebase);
- if (&Apache::lonnet::extract_embedded_items($currdirpath,\%allfiles,\%codebase) eq 'ok') {
- if (keys(%allfiles)) {
- foreach my $dependency (keys(%allfiles)) {
- next if (($dependency =~ m{^/(res|adm)/}) || ($dependency =~ m{^https?://}));
- my ($depurl,$relfile,$newcontainer);
- if ($dependency =~ m{^/}) {
- if ($dependency =~ m{^\Q$currurlpath/\E(.+)$}) {
- $relfile = $1;
- if ($dependency =~ m{^\Q$prefix\E(.+)$}) {
- $newcontainer = $1;
- next if ($replacehash->{$newcontainer});
- }
- $depurl = $dependency;
- } else {
- next;
- }
- } else {
- $relfile = $dependency;
- $depurl = $currurlpath;
- $depurl =~ s{[^/]+$}{};
- $depurl .= $dependency;
- ($newcontainer) = ($depurl =~ m{^\Q$prefix\E(.+)$});
- }
- next if ($relfile eq '');
- my $newname = $replacehash->{$container};
- $newname =~ s{[^/]+$}{};
- $replacehash->{$newcontainer} = $newname.$relfile;
- $deps->{$item}{$newcontainer} = 1;
- my ($newurlpath) = ($depurl =~ m{^(.*)/[^/]+$});
- my $depfile = &Apache::lonnet::filelocation('',$depurl);
- my $type = $mm->checktype_filename($depfile);
- if ($type eq 'text/html') {
- &recurse_html($mm,$prefix,$depfile,$newurlpath,$newcontainer,$item,$replacehash,$deps);
- }
- }
- }
- }
- return;
-}
-
sub group_import {
- my ($coursenum, $coursedom, $folder, $container, $caller, $ltitoolsref, @files) = @_;
+ my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_;
my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap,
%removeparam,$importuploaded,$fixuperrors);
$allmaps = {};
@@ -691,114 +298,6 @@ sub group_import {
}
}
if ($url) {
- if ($url =~ m{^(/adm/$coursedom/$coursenum/(\d+)/ext\.tool)\:?(.*)$}) {
- $url = $1;
- my $marker = $2;
- my $info = $3;
- my ($toolid,%toolhash,%toolsettings);
- my @extras = ('linktext','explanation','crslabel','crstitle','crsappend');
- my @toolinfo = split(/:/,$info);
- if ($residx) {
- %toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$coursedom,$coursenum);
- $toolid = $toolsettings{'id'};
- } else {
- $toolid = shift(@toolinfo);
- }
- $toolid =~ s/\D//g;
- ($toolhash{'target'},$toolhash{'width'},$toolhash{'height'},
- $toolhash{'linktext'},$toolhash{'explanation'},
- $toolhash{'crslabel'},$toolhash{'crstitle'},$toolhash{'crsappend'}) = @toolinfo;
- foreach my $item (@extras) {
- $toolhash{$item} = &unescape($toolhash{$item});
- }
- if (ref($ltitoolsref) eq 'HASH') {
- my @deleted;
- if (ref($ltitoolsref->{$toolid}) eq 'HASH') {
- $toolhash{'id'} = $toolid;
- if (($toolhash{'target'} eq 'iframe') || ($toolhash{'target'} eq 'tab') ||
- ($toolhash{'target'} eq 'window')) {
- if ($toolhash{'target'} eq 'window') {
- foreach my $item ('width','height') {
- $toolhash{$item} =~ s/^\s+//;
- $toolhash{$item} =~ s/\s+$//;
- if ($toolhash{$item} =~ /\D/) {
- delete($toolhash{$item});
- if ($residx) {
- if ($toolsettings{$item}) {
- push(@deleted,$item);
- }
- }
- }
- }
- }
- } elsif ($residx) {
- $toolhash{'target'} = $toolsettings{'target'};
- if ($toolhash{'target'} eq 'window') {
- foreach my $item ('width','height') {
- $toolhash{$item} = $toolsettings{$item};
- }
- }
- } elsif (ref($ltitoolsref->{$toolid}->{'display'}) eq 'HASH') {
- $toolhash{'target'} = $ltitoolsref->{$toolid}->{'display'}->{'target'};
- if ($toolhash{'target'} eq 'window') {
- $toolhash{'width'} = $ltitoolsref->{$toolid}->{'display'}->{'width'};
- $toolhash{'height'} = $ltitoolsref->{$toolid}->{'display'}->{'height'};
- }
- }
- if ($toolhash{'target'} eq 'iframe') {
- foreach my $item ('width','height','linktext','explanation') {
- delete($toolhash{$item});
- if ($residx) {
- if ($toolsettings{$item}) {
- push(@deleted,$item);
- }
- }
- }
- } elsif ($toolhash{'target'} eq 'tab') {
- foreach my $item ('width','height') {
- delete($toolhash{$item});
- if ($residx) {
- if ($toolsettings{$item}) {
- push(@deleted,$item);
- }
- }
- }
- }
- if (ref($ltitoolsref->{$toolid}->{'crsconf'}) eq 'HASH') {
- foreach my $item ('label','title','linktext','explanation') {
- my $crsitem;
- if (($item eq 'label') || ($item eq 'title')) {
- $crsitem = 'crs'.$item;
- } else {
- $crsitem = $item;
- }
- if ($ltitoolsref->{$toolid}->{'crsconf'}->{$item}) {
- $toolhash{$crsitem} =~ s/^\s+//;
- $toolhash{$crsitem} =~ s/\s+$//;
- if ($toolhash{$crsitem} eq '') {
- delete($toolhash{$crsitem});
- }
- } else {
- delete($toolhash{$crsitem});
- }
- if (($residx) && (exists($toolsettings{$crsitem}))) {
- unless (exists($toolhash{$crsitem})) {
- push(@deleted,$crsitem);
- }
- }
- }
- }
- my $putres = &Apache::lonnet::put('exttool_'.$marker,\%toolhash,$coursedom,$coursenum);
- if ($putres eq 'ok') {
- if (@deleted) {
- &Apache::lonnet::del('exttool_'.$marker,\@deleted,$coursedom,$coursenum);
- }
- } else {
- return (&mt('Failed to save update to external tool.'),1);
- }
- }
- }
- }
if (($caller eq 'londocs') &&
($folder =~ /^default/)) {
if (($url =~ /\.(page|sequence)$/) && (!$donechk)) {
@@ -810,8 +309,8 @@ sub group_import {
$donechk = 1;
}
if ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) {
- &contained_map_check($url,$folder,$coursenum,$coursedom,\%removefrommap,
- \%removeparam,\%addedmaps,\%hierarchy,\%titles,$allmaps);
+ &contained_map_check($url,$folder,\%removefrommap,\%removeparam,
+ \%addedmaps,\%hierarchy,\%titles,$allmaps);
$importuploaded = 1;
} elsif ($url =~ m{^/res/.+\.(page|sequence)$}) {
next if ($allmaps->{$url});
@@ -824,27 +323,29 @@ sub group_import {
}
my $ext = 'false';
if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }
+ $url = &LONCAPA::map::qtunescape($url);
+ $name = &LONCAPA::map::qtunescape($name);
+ if ($name eq '') {
+ $name = &mt('Web Page');
+ }
if ($url =~ m{^/uploaded/$coursedom/$coursenum/((?:docs|supplemental)/(?:default|\d+))/new\.html$}) {
my $filepath = $1;
- my $fname;
- if ($name eq '') {
- $name = &mt('Web Page');
+ my $fname = $name;
+ if ($fname =~ /^\W+$/) {
$fname = 'web';
} else {
- $fname = $name;
- $fname=&Apache::lonnet::clean_filename($fname);
- if ($fname eq '') {
- $fname = 'web';
- } elsif (length($fname) > 15) {
- $fname = substr($fname,0,14);
- }
+ $fname =~ s/\W/_/g;
+ }
+ if (length($fname > 15)) {
+ $fname = substr($fname,0,14);
}
- my $title = &Apache::loncommon::cleanup_html($name);
my $initialtext = &mt('Replace with your own content.');
my $newhtml = <
+
+
-$title
+
+$name
$initialtext
@@ -852,7 +353,7 @@ $initialtext
END
$env{'form.output'}=$newhtml;
- my $result =
+ my $result =
&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,
'output',
"$filepath/$residx/$fname.html");
@@ -866,8 +367,6 @@ END
return (&mt('Failed to save new web page.'),1);
}
}
- $name = &LONCAPA::map::qtunescape($name);
- $url = &LONCAPA::map::qtunescape($url);
$LONCAPA::map::resources[$residx] =
join(':', ($name, $url, $ext, 'normal', 'res'));
}
@@ -878,7 +377,7 @@ END
removefrommap => \%removefrommap,
removeparam => \%removeparam,
);
- my ($result,$msgsarray,$lockerror) =
+ my ($result,$msgsarray,$lockerror) =
&apply_fixups($folder,1,$coursedom,$coursenum,\%import_errors,\%updated);
if (keys(%import_errors) > 0) {
$fixuperrors =
@@ -905,13 +404,6 @@ END
}
my ($errtext,$fatal) =
&storemap($coursenum, $coursedom, $folder.'.'.$container,1);
- unless ($fatal) {
- if ($folder =~ /^supplemental/) {
- &Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1);
- my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
- $folder.'.'.$container);
- }
- }
return ($errtext,$fatal,$fixuperrors);
}
@@ -977,14 +469,12 @@ sub log_docs {
}
sub docs_change_log {
- my ($r,$coursenum,$coursedom,$folder,$allowed,$crstype,$iconpath,$canedit)=@_;
+ my ($r,$coursenum,$coursedom,$folder,$allowed,$crstype,$iconpath)=@_;
my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
- my $navmap;
my $js = ''."\n"
- .''."\n";
+ .''."\n";
# Breadcrumbs
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -5644,61 +3720,35 @@ sub handler {
if ($showdoc) {
$r->print(&Apache::loncommon::start_page("$crstype documents",undef,
{'force_register' => $showdoc,}));
- } elsif ($toolsflag) {
- my ($breadtext,$breadtitle);
- $breadtext = "$crstype Editor";
- if ($canedit) {
- $breadtitle = 'Editing '.$crstype.' Contents';
- } else {
- $breadtext .= ' (View-only mode)';
- $breadtitle = 'Viewing '.$crstype.' Contents';
- }
- &Apache::lonhtmlcommon::add_breadcrumb({
- href=>"/adm/coursedocs",text=>$breadtext});
- $r->print(&Apache::loncommon::start_page("$crstype Contents", $script)
- .&Apache::loncommon::help_open_menu('','',273,'RAT')
- .&Apache::lonhtmlcommon::breadcrumbs(
- $breadtitle)
- );
} elsif ($r->uri eq '/adm/supplemental') {
my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype);
$r->print(&Apache::loncommon::start_page("Supplemental $crstype Content",undef,
{'bread_crumbs' => $brcrum,}));
} else {
- my ($breadtext,$breadtitle,$helpitem);
- $breadtext = "$crstype Editor";
- if ($canedit) {
- $breadtitle = 'Editing '.$crstype.' Contents';
- $helpitem = 'Docs_Adding_Course_Doc';
- } else {
- $breadtext .= ' (View-only mode)';
- $breadtitle = 'Viewing '.$crstype.' Contents';
- $helpitem = 'Docs_Viewing_Course_Doc';
- }
&Apache::lonhtmlcommon::add_breadcrumb({
- href=>"/adm/coursedocs",text=>$breadtext});
+ href=>"/adm/coursedocs",text=>"$crstype Contents"});
+
$r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
{'add_entries' => $addentries}
)
.&Apache::loncommon::help_open_menu('','',273,'RAT')
.&Apache::lonhtmlcommon::breadcrumbs(
- $breadtitle,
- $helpitem)
+ 'Editing '.$crstype.' Contents',
+ 'Docs_Adding_Course_Doc')
);
}
my %allfiles = ();
my %codebase = ();
my ($upload_result,$upload_output,$uploadphase);
- if ($canedit) {
+ if ($allowed) {
if (($env{'form.uploaddoc.filename'}) &&
($env{'form.cmd'}=~/^upload_(\w+)/)) {
my $context = $1;
# Process file upload - phase one - upload and parse primary file.
undef($hadchanges);
$uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,
- \%allfiles,\%codebase,$context,$crstype);
- undef($navmap);
+ \%allfiles,\%codebase,$context);
if ($hadchanges) {
&mark_hash_old();
}
@@ -5743,20 +3793,18 @@ sub handler {
if ($allowed && $toolsflag) {
$r->print(&startContentScreen('tools'));
- $r->print(&generate_admin_menu($crstype,$canedit));
+ $r->print(&generate_admin_menu($crstype));
$r->print(&endContentScreen());
} elsif ((!$showdoc) && (!$uploadphase)) {
# -----------------------------------------------------------------------------
my %lt=&Apache::lonlocal::texthash(
'copm' => 'All documents out of a published map into this folder',
'upfi' => 'Upload File',
- 'upld' => 'Upload Content',
+ 'upld' => 'Import Content',
'srch' => 'Search',
'impo' => 'Import',
'lnks' => 'Import from Stored Links',
'impm' => 'Import from Assembled Map',
- 'extr' => 'External Resource',
- 'extt' => 'External Tool',
'selm' => 'Select Map',
'load' => 'Load Map',
'newf' => 'New Folder',
@@ -5765,7 +3813,7 @@ sub handler {
'navc' => 'Table of Contents',
'sipa' => 'Simple Course Page',
'sipr' => 'Simple Problem',
- 'webp' => 'Blank Web Page (editable)',
+ 'webp' => 'Blank Web Page (editable)',
'drbx' => 'Drop Box',
'scuf' => 'External Scores (handgrade, upload, clicker)',
'bull' => 'Discussion Board',
@@ -5773,58 +3821,19 @@ sub handler {
'grpo' => 'Group Portfolio',
'rost' => 'Course Roster',
'abou' => 'Personal Information Page for a User',
- 'imsf' => 'IMS Upload',
- 'imsl' => 'Upload IMS package',
+ 'imsf' => 'IMS Import',
+ 'imsl' => 'Import IMS package',
'cms' => 'Origin of IMS package',
'se' => 'Select',
'file' => 'File',
'title' => 'Title',
'comment' => 'Comment',
'parse' => 'Upload embedded images/multimedia files if HTML file',
- 'bb5' => 'Blackboard 5',
- 'bb6' => 'Blackboard 6',
- 'angel5' => 'ANGEL 5.5',
- 'webctce4' => 'WebCT 4 Campus Edition',
- 'er' => 'Editing rights unavailable for your current role.',
- );
+ );
# -----------------------------------------------------------------------------
- # Calculate free quota space for a user or course. A javascript function checks
- # file size to determine if upload should be allowed.
- my $quotatype = 'unofficial';
- if ($crstype eq 'Community') {
- $quotatype = 'community';
- } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.coursecode'}) {
- $quotatype = 'official';
- } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.textbook'}) {
- $quotatype = 'textbook';
- }
- my $disk_quota = &Apache::loncommon::get_user_quota($coursenum,$coursedom,
- 'course',$quotatype); # expressed in MB
- my $current_disk_usage = 0;
- foreach my $subdir ('docs','supplemental') {
- $current_disk_usage += &Apache::lonnet::diskusage($coursedom,$coursenum,
- "userfiles/$subdir",1); # expressed in kB
- }
- my $free_space = 1024 * ((1024 * $disk_quota) - $current_disk_usage);
- my $usage = $current_disk_usage/1024; # in MB
- my $quota = $disk_quota;
- my $percent;
- if ($disk_quota == 0) {
- $percent = 100.0;
- } else {
- $percent = 100*($usage/$disk_quota);
- }
- $usage = sprintf("%.2f",$usage);
- $quota = sprintf("%.2f",$quota);
- $percent = sprintf("%.0f",$percent);
- my $quotainfo = ''.&mt('Currently using [_1] of the [_2] available.',
- $percent.'%',$quota.' MB').'
';
-
my $fileupload=(<
-
-
+
FIUP
my $checkbox=(<
-->
CHBO
my $imsfolder = $env{'form.folder'};
@@ -5849,17 +3858,17 @@ CHBO
$lt{'cms'}:
-
-
+
IMSFORM
@@ -5874,7 +3883,7 @@ IMSFORM
$fileupload
$lt{'title'}:
-
+
$pathitem
@@ -5882,17 +3891,11 @@ IMSFORM
$checkbox
-
+
FUFORM
- my $mapimportjs;
- if ($canedit) {
- $mapimportjs = "javascript:openbrowser('mapimportform','importmap','sequence,page','');";
- } else {
- $mapimportjs = "javascript:alert('".&js_escape($lt{'er'})."');";
- }
my $importpubform=(<