--- loncom/interface/londocs.pm 2020/09/02 02:09:17 1.484.2.89 +++ loncom/interface/londocs.pm 2013/04/02 00:07:08 1.541 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.484.2.89 2020/09/02 02:09:17 raeburn Exp $ +# $Id: londocs.pm,v 1.541 2013/04/02 00:07:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,12 +41,9 @@ use Apache::lonclonecourse; use Apache::lonnavmaps; use Apache::lonnavdisplay(); use Apache::lonextresedit(); -use Apache::lontemplate(); -use Apache::lonsimplepage(); use HTML::Entities; use HTML::TokeParser; use GDBM_File; -use File::MMagic; use Apache::lonlocal; use Cwd; use LONCAPA qw(:DEFAULT :match); @@ -59,7 +56,6 @@ my $hashtied; my %alreadyseen=(); my $hadchanges; -my $suppchanges; my %help=(); @@ -83,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); } @@ -139,69 +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 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) { @@ -220,407 +156,118 @@ 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} = '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 = '
    '. - '
    '. - &mt('Select the Authoring Space'). - ''; - } else { - $preamble .= ''; - } - } - unless ($home==1) { - $preamble .= '
    '."\n"; - } - my $title=$origcrsdata{'description'}; - $title=~s/[\/\s]+/\_/gs; - $title=&clean($title); - $preamble .= '
    '. - '
    '.&mt('Folder in Authoring Space').''. - ''. - '
    '."\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('
    '."\n"); + unless ($home==1) { + $r->print('
    '. + '
    '. + &mt('Select the Authoring Space'). + ''); + } else { + $r->print(''); + } + } + } + unless ($home==1) { + $r->print('
    '."\n"); + } + my $title=$origcrsdata{'description'}; + $title=~s/[\/\s]+/\_/gs; + $title=&clean($title); + $r->print('
    '. + '
    '.&mt('Folder in Authoring Space').''. + ''. + '

    '."\n"); + &tiehash(); + $r->print('

    '.&mt('Filenames in Authoring Space').'

    ' + .&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .''.&mt('Internal Filename').'' + .''.&mt('Title').'' + .''.&mt('Save as ...').'' + .&Apache::loncommon::end_data_table_header_row()); + foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { + $r->print(&Apache::loncommon::start_data_table_row() + .''.$file.''); + my ($ext)=($file=~/\.(\w+)$/); + my $title=$hash{'title_'.$hash{ + 'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$file}}; + $r->print(''.($title?$title:' ').''); + if (!$title) { + $title=$file; + } else { + $title=~s|/|_|g; + } + $title=~s/\.(\w+)$//; + $title=&clean($title); + $title.='.'.$ext; + $r->print("\n" + .&Apache::loncommon::end_data_table_row()); + } + $r->print(&Apache::loncommon::end_data_table()); + &untiehash(); + $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, @files) = @_; my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap, @@ -688,13 +335,15 @@ sub group_import { } else { $fname =~ s/\W/_/g; } - if (length($fname) > 15) { + if (length($fname > 15)) { $fname = substr($fname,0,14); } my $initialtext = &mt('Replace with your own content.'); my $newhtml = < + + + $name @@ -703,7 +352,7 @@ $initialtext END $env{'form.output'}=$newhtml; - my $result = + my $result = &Apache::lonnet::finishuserfileupload($coursenum,$coursedom, 'output', "$filepath/$residx/$fname.html"); @@ -728,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 = @@ -755,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); } @@ -827,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(); @@ -5382,61 +4300,34 @@ 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(); } @@ -5481,14 +4372,14 @@ 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', @@ -5501,7 +4392,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', @@ -5509,58 +4400,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'}; @@ -5585,17 +4437,17 @@ CHBO

    $lt{'cms'}:  - - - - - + + + +

    - + IMSFORM @@ -5610,7 +4462,7 @@ IMSFORM $fileupload
    $lt{'title'}:
    - + $pathitem
    @@ -5618,17 +4470,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=(< $lt{'impm'}$help{'Load_Map'} @@ -5639,42 +4485,31 @@ FUFORM $lt{'copm'}
    -  $lt{'selm'}
    - + onfocus="this.blur();openbrowser('mapimportform','importmap','sequence,page','');" /> +  $lt{'selm'}
    + SEDFFORM - - my $fromstoredjs; - if ($canedit) { - $fromstoredjs = 'open_StoredLinks_Import()'; - } else { - $fromstoredjs = "alert('".&js_escape($lt{'er'})."')"; - } - my @importpubforma = ( { ''.$lt{srch}.'' => $pathitem."$lt{'srch'}" }, { ''.$lt{impo}.'' => "$lt{'impo'}$help{'Importing_LON-CAPA_Resource'}" }, - { ''.$lt{lnks}.'' => ''.$lt{'lnks'}.'' }, + { ''.$lt{lnks}.'' => "$lt{'lnks'}" }, { ''.$lt{impm}.'' => $importpubform } ); $importpubform = &create_form_ul(&create_list_elements(@importpubforma)); my $extresourcesform = &Apache::lonextresedit::extedit_form(0,0,undef,undef,$pathitem, - $help{'Adding_External_Resource'}, - undef,undef,$disabled); + $help{'Adding_External_Resource'}); if ($allowed) { my $folder = $env{'form.folder'}; if ($folder eq '') { $folder='default'; } - if ($canedit) { - my $output = &update_paste_buffer($coursenum,$coursedom,$folder); - if ($output) { - $r->print($output); - } + my $output = &update_paste_buffer($coursenum,$coursedom,$folder); + if ($output) { + $r->print($output); } $r->print(< @@ -5708,14 +4543,13 @@ HIDDENFORM # my $savefolderpath; - my $hostname = $r->hostname(); if ($allowed) { my $folder=$env{'form.folder'}; - if ((($folder eq '') && (!$hiddentop)) || ($supplementalflag)) { + if ($folder eq '' || $supplementalflag) { $folder='default'; $savefolderpath = $env{'form.folderpath'}; - $env{'form.folderpath'}='default&'.&escape(&mt('Main Content')); + $env{'form.folderpath'}='default&'.&escape(&mt('Content')); $pathitem = ''; } @@ -5736,17 +4570,17 @@ HIDDENFORM my $newnavform=(< - + $pathitem - $lt{'navc'} + $lt{'navc'} $help{'Navigate_Content'} NNFORM my $newsmppageform=(< - + $pathitem $lt{'sipa'} @@ -5760,7 +4594,7 @@ NSPFORM $pathitem $lt{'sipr'} - $help{'Simple_Problem'} + $help{'Simple Problem'} NSPROBFORM @@ -5771,7 +4605,6 @@ NSPROBFORM $pathitem $lt{'drbx'} - $help{'Dropbox'} NDBFORM @@ -5787,7 +4620,7 @@ NEXUFORM my $newbulform=(< - + $pathitem $lt{'bull'} @@ -5797,18 +4630,18 @@ NBFORM my $newaboutmeform=(< - + $pathitem - $lt{'mypi'} + $lt{'mypi'} $help{'My Personal Information Page'} NAMFORM my $newaboutsomeoneform=(< - + $pathitem $lt{'abou'} @@ -5817,12 +4650,12 @@ NASOFORM my $newrosterform=(< - + $pathitem - $lt{'rost'} - $help{'Course_Roster'} + $lt{'rost'} + $help{'Course Roster'} NROSTFORM @@ -5838,11 +4671,11 @@ NROSTFORM } my $newwebpageform =(< - + $pathitem $lt{'webp'} - $help{'Web_Page'} + $help{'Web Page'} NWEBFORM @@ -5862,7 +4695,7 @@ my $newfolderb;
    - + $lt{'newp'} $help{'Adding_Pages'}
    @@ -5873,18 +4706,18 @@ NPFORM
    $pathitem - + $lt{'newf'}$help{'Adding_Folders'}
    NFFORM my $newsylform=(< - + $pathitem - $lt{'syll'} + $lt{'syll'} $help{'Syllabus'} @@ -5892,27 +4725,21 @@ NSYLFORM my $newgroupfileform=(< - + $pathitem - $lt{'grpo'} + $lt{'grpo'} $help{'Group Portfolio'} NGFFORM - if ($container eq 'page') { - @specialdocumentsforma=( - {''.$lt{webp}.''=>$newwebpageform}, - ); - } else { - @specialdocumentsforma=( + @specialdocumentsforma=( {''.$lt{newp}.''=>$newpageform}, - {''.$lt{syll}.''=>$newsylform}, - {''.$lt{navc}.''=>$newnavform}, + {''.$lt{syll}.''=>$newsylform}, + {''.$lt{navc}.''=>$newnavform}, {''.$lt{sipa}.''=>$newsmppageform}, {''.$lt{webp}.''=>$newwebpageform}, - ); - } + ); $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma)); @@ -5925,7 +4752,7 @@ NGFFORM ); } push(@importdoc, - {''.$lt{upl}.''=>$fileuploadform} + {''.$lt{upl}.''=>$fileuploadform} ); $fileuploadform = &create_form_ul(&create_list_elements(@importdoc)); @@ -5941,35 +4768,31 @@ NGFFORM {''.$lt{bull}.''=>$newbulform}, {''.$lt{mypi}.''=>$newaboutmeform}, {''.$lt{abou}.''=>$newaboutsomeoneform}, - {''.$lt{rost}.''=>$newrosterform}, - {''.$lt{grpo}.''=>$newgroupfileform}, + {''.$lt{rost}.''=>$newrosterform}, + {''.$lt{grpo}.''=>$newgroupfileform}, ); $communityform = &create_form_ul(&create_list_elements(@communityforma)); my %orderhash = ( - 'aa' => ['Upload',$fileuploadform], - 'bb' => ['Import',$importpubform], - 'cc' => ['Grading',$gradingform], - 'ee' => ['Other',$specialdocumentsform], + 'aa' => ['Import Content',$fileuploadform], + 'bb' => ['Published Content',$importpubform], + 'cc' => ['Grading Resources',$gradingform], ); unless ($container eq 'page') { $orderhash{'00'} = ['Newfolder',$newfolderform]; $orderhash{'dd'} = ['Collaboration',$communityform]; + $orderhash{'ee'} = ['Special Pages',$specialdocumentsform]; } $hadchanges=0; unless (($supplementalflag || $toolsflag)) { my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, - $supplementalflag,\%orderhash,$iconpath,$pathitem, - $canedit,$hostname,\$navmap,$hiddentop); - undef($navmap); + $supplementalflag,\%orderhash,$iconpath,$pathitem); if ($error) { $r->print('

    '.$error.'

    '); } if ($hadchanges) { - unless (&is_hash_old()) { - &mark_hash_old(); - } + &mark_hash_old(); } &changewarning($r,''); @@ -6019,7 +4842,7 @@ SUPDOCFORM my $supnewfolderform=(< - + $pathitem $lt{'newf'} @@ -6029,8 +4852,7 @@ SNFFORM my $supextform = &Apache::lonextresedit::extedit_form(1,0,undef,undef,$pathitem, - $help{'Adding_External_Resource'}, - undef,undef,$disabled); + $help{'Adding_External_Resource'}); my $supnewsylform=(< @@ -6038,7 +4860,7 @@ SNFFORM $pathitem - $lt{'syll'} + $lt{'syll'} $help{'Syllabus'} SNSFORM @@ -6049,7 +4871,7 @@ SNSFORM $pathitem - $lt{'mypi'} + $lt{'mypi'} $help{'My Personal Information Page'} SNAMFORM @@ -6070,15 +4892,15 @@ SNAMFORM $pathitem $lt{'webp'} - $help{'Web_Page'} + $help{'Web Page'} SWEBFORM my @specialdocs = ( - {''.$lt{syll}.'' + {''.$lt{syll}.'' =>$supnewsylform}, - {''.$lt{mypi}.'' + {''.$lt{mypi}.'' =>$supnewaboutmeform}, {''.$lt{webp}.''=>$supwebpageform}, @@ -6093,33 +4915,19 @@ my @supimportdoc = ( $supupdocform = &create_form_ul(&create_list_elements(@supimportdoc)); my %suporderhash = ( '00' => ['Supnewfolder', $supnewfolderform], - 'ee' => ['Upload',$supupdocform], - 'ff' => ['Other',&create_form_ul(&create_list_elements(@specialdocs))] + 'ee' => ['Import Content',$supupdocform], + 'ff' => ['Special Pages',&create_form_ul(&create_list_elements(@specialdocs))] ); if ($supplementalflag) { my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, - $supplementalflag,\%suporderhash,$iconpath,$pathitem, - $canedit,$hostname); + $supplementalflag,\%suporderhash,$iconpath,$pathitem); if ($error) { $r->print('

    '.$error.'

    '); - } else { - if ($suppchanges) { - my %servers = &Apache::lonnet::internet_dom_servers($coursedom); - my @ids=&Apache::lonnet::current_machine_ids(); - foreach my $server (keys(%servers)) { - next if (grep(/^\Q$server\E$/,@ids)); - my $hashid=$coursenum.':'.$coursedom; - my $cachekey = &escape('suppcount').':'.&escape($hashid); - &Apache::lonnet::remote_devalidate_cache($server,[$cachekey]); - } - &Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1); - undef($suppchanges); - } } } } elsif ($supplementalflag) { my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, - $supplementalflag,'',$iconpath,$pathitem,'',$hostname); + $supplementalflag,'',$iconpath,$pathitem); if ($error) { $r->print('

    '.$error.'

    '); } @@ -6153,7 +4961,6 @@ my %suporderhash = ( sub embedded_form_elems { my ($phase,$primaryurl,$newidx) = @_; my $folderpath = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); - $newidx =~s /\D+//g; return < @@ -6174,11 +4981,7 @@ sub embedded_destination { } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { $destination .= $2.'/'; } - my $newidx = $env{'form.newidx'}; - $newidx =~s /\D+//g; - if ($newidx) { - $destination .= $newidx; - } + $destination .= $env{'form.newidx'}; my $dir_root = '/userfiles'; return ($destination,$dir_root); } @@ -6198,18 +5001,15 @@ sub decompression_info { my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; my $container='sequence'; my ($pathitem,$hiddenelem); - my @hiddens = ('newidx','comment','position','folderpath','archiveurl'); + my @hiddens = ('newidx','comment','position','folderpath'); if ($env{'form.folderpath'} =~ /\:1$/) { $container='page'; } unshift(@hiddens,$pathitem); foreach my $item (@hiddens) { - if ($item eq 'newidx') { - next if ($env{'form.'.$item} =~ /\D/); - } if ($env{'form.'.$item}) { $hiddenelem .= ''."\n"; + $env{'form.'.$item}.'" />'."\n"; } } return ($destination,$dir_root,$londocroot,$docudom,$docuname,$container, @@ -6266,34 +5066,25 @@ sub remove_archive { } else { $delwarning = &mt('An error occurred retrieving the contents of the current folder.'); } - $delwarning .= ' '.&mt('As a result the archive file has not been removed.'); + $delwarning .= &mt('As a result the archive file has not been removed.'); } else { my $currcmd = $env{'form.cmd'}; my $position = $env{'form.position'}; - my $archiveidx = $position; - if ($position > 0) { - if (($env{'form.autoextract_camtasia'}) && (scalar(@LONCAPA::map::order) == 2)) { - $archiveidx = $position-1; - } - $env{'form.cmd'} = 'remove_'.$archiveidx; - my ($title,$url,@rrest) = - split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$archiveidx]]); - if ($url eq $env{'form.archiveurl'}) { - if (&handle_edit_cmd($docuname,$docudom)) { - ($errtext,$fatal) = &storemap($docuname,$docudom,$map,1); - if ($fatal) { - if ($container eq 'page') { - $delwarning = &mt('An error occurred updating the contents of the current page.'); - } else { - $delwarning = &mt('An error occurred updating the contents of the current folder.'); - } + if ($position > 0) { + $env{'form.cmd'} = 'del_'.$position; + my ($title,$url,@rrest) = + split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$position]]); + if (&handle_edit_cmd($docuname,$docudom)) { + ($errtext,$fatal) = &storemap($docuname,$docudom,$map,1); + if ($fatal) { + if ($container eq 'page') { + $delwarning = &mt('An error occurred updating the contents of the current page.'); } else { - $delresult = &mt('Archive file removed.'); + $delwarning = &mt('An error occurred updating the contents of the current folder.'); } + } else { + $delresult = &mt('Archive file removed.'); } - } else { - $delwarning .= &mt('Archive file had unexpected item number in folder.'). - ' '.&mt('As a result the archive file has not been removed.'); } } $env{'form.cmd'} = $currcmd; @@ -6312,16 +5103,16 @@ sub remove_archive { } sub generate_admin_menu { - my ($crstype,$canedit) = @_; + my ($crstype) = @_; my $lc_crstype = lc($crstype); my ($home,$other,%outhash)=&authorhosts(); - my %lt= ( # do not translate here + my %lt=&Apache::lonlocal::texthash ( 'vc' => 'Verify Content', 'cv' => 'Check/Set Resource Versions', 'ls' => 'List Resource Identifiers', 'imse' => 'Export contents to IMS Archive', - 'dcd' => "Copy $crstype Content to Authoring Space", - ); + 'dcd' => "Dump $crstype Content to Authoring Space", + ); my ($candump,$dumpurl); if ($home + $other > 0) { $candump = 'F'; @@ -6351,14 +5142,14 @@ sub generate_admin_menu { { linktext => $lt{'vc'}, url => "javascript:injectData(document.courseverify,'dummy','verify','$lt{'vc'}')", permission => 'F', - help => 'Docs_Verify_Content', + help => 'Verify_Content', icon => 'verify.png', linktitle => 'Verify contents can be retrieved/rendered', }, { linktext => $lt{'cv'}, url => "javascript:injectData(document.courseverify,'dummy','versions','$lt{'cv'}')", permission => 'F', - help => 'Docs_Check_Resource_Versions', + help => 'Check_Resource_Versions', icon => 'resversion.png', linktitle => "View version information for resources in your $lc_crstype, and fix/unfix use of specific versions", }, @@ -6370,9 +5161,7 @@ sub generate_admin_menu { linktitle => "List the unique identifier used for each resource instance in your $lc_crstype" }, ] - }); - if ($canedit) { - push(@menu, + }, { categorytitle=>'Export', items =>[ { linktext => $lt{'imse'}, @@ -6385,13 +5174,12 @@ sub generate_admin_menu { { linktext => $lt{'dcd'}, url => $dumpurl, permission => $candump, - help => 'Docs_Dump_Course_Docs', + #help => '', icon => 'dump.png', linktitle => $lt{'dcd'}, }, ] }); - } return '
    '."\n". ''."\n". &Apache::lonhtmlcommon::generate_menu(@menu)."\n". @@ -6400,22 +5188,21 @@ sub generate_admin_menu { sub generate_edit_table { my ($tid,$orderhash_ref,$to_show,$iconpath,$jumpto,$readfile, - $need_save,$copyfolder,$canedit) = @_; + $need_save,$copyfolder) = @_; return unless(ref($orderhash_ref) eq 'HASH'); my %orderhash = %{$orderhash_ref}; - my ($form, $activetab, $active, $disabled); - if (($env{'form.active'} ne '') && ($env{'form.active'} ne '00')) { + my $form; + my $activetab; + my $active; + if (($env{'form.active'} ne '') && ($env{'form.active'} ne 'aa')) { $activetab = $env{'form.active'}; } - unless ($canedit) { - $disabled = ' disabled="disabled"'; - } my $backicon = $iconpath.'clickhere.gif'; my $backtext = &mt('Exit Editor'); $form = '
    '. '
    END @@ -6499,9 +5286,8 @@ END } sub editing_js { - my ($udom,$uname,$supplementalflag,$coursedom,$coursenum, - $canedit,$hostname,$navmapref) = @_; - my %js_lt = &Apache::lonlocal::texthash( + my ($udom,$uname,$supplementalflag) = @_; + my %lt = &Apache::lonlocal::texthash( p_mnf => 'Name of New Folder', t_mnf => 'New Folder', p_mnp => 'Name of New Page', @@ -6511,25 +5297,19 @@ sub editing_js { p_msb => 'Title for the Problem', p_mdb => 'Title for the Drop Box', p_mbb => 'Title for the Discussion Board', - p_mwp => 'Title for Web Page', + p_mwp => 'Title for Web Page', p_mab => "Enter user:domain for User's Personal Information Page", p_mab2 => 'Personal Information Page of ', p_mab_alrt1 => 'Not a valid user:domain', p_mab_alrt2 => 'Please enter both user and domain in the format user:domain', p_chn => 'New Title', p_rmr1 => 'WARNING: Removing a resource makes associated grades and scores inaccessible!', - p_rmr2a => 'Remove', - p_rmr2b => '?', - p_rmr3a => 'Remove those', - p_rmr3b => 'items?', - p_rmr4 => 'WARNING: Removing a resource uploaded to a course cannot be undone via "Undo Delete".', - p_rmr5 => 'Push "Cancel" and then use "Cut" instead if you might need to undo this change.', + p_rmr2a => 'Remove[_99]', + p_rmr2b => '?[_99]', p_ctr1a => 'WARNING: Cutting a resource makes associated grades and scores inaccessible!', p_ctr1b => 'Grades remain inaccessible if resource is pasted into another folder.', - p_ctr2a => 'Cut', - p_ctr2b => '?', - p_ctr3a => 'Cut those', - p_ctr3b => 'items?', + p_ctr2a => 'Cut[_98]', + p_ctr2b => '?[_98]', rpck => 'Enter number to pick (e.g., 3)', imsfile => 'You must choose an IMS package for import', imscms => 'You must select which Course Management System was the source of the IMS package', @@ -6537,23 +5317,19 @@ sub editing_js { titbl => 'Title is blank', more => '(More ...)', less => '(Less ...)', - noor => 'No actions selected or changes to settings specified.', - noch => 'No changes to settings specified.', - noac => 'No actions selected.', - edri => 'Editing rights unavailable for your current role.', ); - &js_escape(\%js_lt); my $crstype = &Apache::loncommon::course_type(); my $docs_folderpath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'},'<>&"'); my $main_container_page; if (&HTML::Entities::decode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'}) =~ /\:1$/) { $main_container_page = 1; } - my $backtourl; - my $toplevelmain = &escape(&default_folderpath($coursenum,$coursedom,$navmapref)); + my $toplevelmain = + &escape(&mt('Main '.$crstype.' Content').':::::'); my $toplevelsupp = &supplemental_base(); + my $backtourl; if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) { my $caller = $1; if ($caller =~ /^supplemental/) { @@ -6562,49 +5338,8 @@ sub editing_js { my ($map,$id,$res)=&Apache::lonnet::decode_symb($caller); $res = &Apache::lonnet::clutter($res); if (&Apache::lonnet::is_on_map($res)) { - my ($url,$anchor); - if ($res =~ /^([^#]+)#([^#]+)$/) { - $url = $1; - $anchor = $2; - if (($caller =~ m{^([^#]+)\Q#$anchor\E$})) { - $caller = $1.&escape('#').$anchor; - } - } else { - $url = $res; - } - $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($url),'<>&"'); - if ($backtourl =~ m{^\Q/uploaded/$coursedom/$coursenum/\Edefault_\d+\.sequence$}) { - $backtourl .= '?navmap=1'; - } else { - $backtourl .= '?symb='. - &HTML::Entities::encode($caller,'<>&"'); - } - if ($backtourl =~ m{^\Q/public/$coursedom/$coursenum/syllabus\E}) { - if (($ENV{'SERVER_PORT'} == 443) && - ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { - unless (&Apache::lonnet::uses_sts()) { - if ($hostname ne '') { - $backtourl = 'http://'.$hostname.$backtourl; - } - $backtourl .= (($backtourl =~ /\?/) ? '&':'?').'usehttp=1'; - } - } - } elsif ($backtourl =~ m{^/adm/wrapper/ext/(?!https:)}) { - if (($ENV{'SERVER_PORT'} == 443) && ($hostname ne '')) { - unless (&Apache::lonnet::uses_sts()) { - if ($hostname ne '') { - $backtourl = 'http://'.$hostname.$backtourl; - } - $backtourl .= (($backtourl =~ /\?/) ? '&':'?').'usehttp=1'; - } - } - } - if ($anchor ne '') { - $backtourl .= '#'.&HTML::Entities::encode($anchor,'<>&"'); - } - $backtourl = &Apache::loncommon::escape_single($backtourl); - } else { - $backtourl = '/adm/navmaps'; + $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($res),'<>&"').'?symb='. + &HTML::Entities::encode($caller,'<>&"'); } } } elsif ($env{'docs.exit.'.$env{'request.course.id'}} eq '/adm/menu') { @@ -6623,11 +5358,9 @@ sub editing_js { $fieldsets = "'suppext','suppdoc'"; } - my $jsmakefunctions; - if ($canedit) { - $jsmakefunctions = <$js_lt{'more'}'; + document.getElementById('more'+caller).innerHTML = '  $lt{'more'}'; } else { document.getElementById('more'+caller).innerHTML = ''; } @@ -7283,10 +5907,10 @@ function togglePick(caller,value) { function toggleCheckUncheck(caller,more) { if (more == 1) { - document.getElementById('more'+caller).innerHTML = '  $js_lt{'less'}'; + document.getElementById('more'+caller).innerHTML = '  $lt{'less'}'; document.getElementById('allfields'+caller).style.display='block'; } else { - document.getElementById('more'+caller).innerHTML = '  $js_lt{'more'}'; + document.getElementById('more'+caller).innerHTML = '  $lt{'more'}'; document.getElementById('allfields'+caller).style.display='none'; } resize_scrollbox('contentscroll','1','1'); @@ -7326,9 +5950,6 @@ function checkSubmits() { var numchanges = 0; var form = document.saveactions; var doactions = multiActions(); - var cutwarnings = 0; - var remwarnings = 0; - var removalinfo = 0; if (doactions == 1) { var remidxlist = document.cumulativeactions.allremoveidx.value; if ((remidxlist != '') && (remidxlist != null)) { @@ -7338,16 +5959,6 @@ function checkSubmits() { if (document.getElementById('remove_'+remidxs[i]).checked) { form.multiremove.value += remidxs[i]+','; numchanges ++; - if (document.getElementById('skip_remove_'+remidxs[i])) { - if (document.getElementById('skip_remove_'+remidxs[i]).value == 0) { - remwarnings ++; - } - } - if (document.getElementById('confirm_removal_'+remidxs[i])) { - if (document.getElementById('confirm_removal_'+remidxs[i]).value == 1) { - removalinfo ++; - } - } } } } @@ -7360,11 +5971,6 @@ function checkSubmits() { if (document.getElementById('cut_'+cutidxs[i]).checked == true) { form.multicut.value += cutidxs[i]+','; numchanges ++; - if (document.getElementById('skip_cut_'+cutidxs[i])) { - if (document.getElementById('skip_cut_'+cutidxs[i]).value == 0) { - cutwarnings ++; - } - } } } } @@ -7386,12 +5992,10 @@ function checkSubmits() { } } var dosettings = multiSettings(); - var haschanges = 0; if (dosettings == 1) { form.allencrypturl.value = ''; form.allhiddenresource.value = ''; - form.changeparms.value = 'all'; - var patt=new RegExp(",\$"); + form.changeparms.value = 'all'; var allidxlist = document.cumulativesettings.allidx.value; if ((allidxlist != '') && (allidxlist != null)) { var allidxs = allidxlist.split(','); @@ -7408,8 +6012,6 @@ function checkSubmits() { } } } - form.allhiddenresource.value = form.allhiddenresource.value.replace(patt,""); - form.allencrypturl.value = form.allencrypturl.value.replace(patt,""); } } form.allrandompick.value = ''; @@ -7428,60 +6030,12 @@ function checkSubmits() { form.allrandomorder.value += allmapidxs[i]+','; } } - form.allrandompick.value = form.allrandompick.value.replace(patt,""); - form.allrandomorder.value = form.allrandomorder.value.replace(patt,""); - } - if (document.cumulativesettings.currhiddenresource.value != form.allhiddenresource.value) { - haschanges = 1; - } - if (document.cumulativesettings.currencrypturl.value != form.allencrypturl.value) { - haschanges = 1; - } - if (document.cumulativesettings.currrandomorder.value != form.allrandomorder.value) { - haschanges = 1; - } - if (document.cumulativesettings.currrandompick.value != form.allrandompick.value) { - haschanges = 1; - } - } - if (doactions == 1) { - if (numchanges > 0) { - if ((cutwarnings > 0) || (remwarnings > 0) || (removalinfo > 0)) { - if (remwarnings > 0) { - if (!confirm('$js_lt{"p_rmr1"}\\n\\n$js_lt{"p_rmr3a"} '+remwarnings+' $js_lt{"p_rmr3b"}')) { - return false; - } - } - if (removalinfo > 0) { - if (!confirm('$js_lt{"p_rmr4"}\\n$js_lt{"p_rmr5"}\\n\\n$js_lt{"p_rmr3a"} '+removalinfo+' $js_lt{"p_rmr3b"}')) { - return false; - } - } - if (cutwarnings > 0) { - if (!confirm('$js_lt{"p_ctr1a"}\\n$js_lt{"p_ctr1b"}\\n\\n$js_lt{"p_ctr3a"} '+cutwarnings+' $js_lt{"p_ctr3b"}')) { - return false; - } - } - } - form.submit(); - return true; - } - } - if (dosettings == 1) { - if (haschanges == 1) { - form.submit(); - return true; - } - } - if ((dosettings == 1) && (doactions == 1)) { - alert("$js_lt{'noor'}"); - } else { - if (dosettings == 1) { - alert("$js_lt{'noch'}"); - } else { - alert("$js_lt{'noac'}"); } } + if ((numchanges > 0) || (dosettings == 1)) { + form.submit(); + return true; + } return false; } @@ -7565,7 +6119,7 @@ function setBoxes(value) { return; } -ENDSCRIPT +ENDNEWSCRIPT } sub history_tab_js { @@ -7594,19 +6148,13 @@ ENDINJECT sub dump_switchserver_js { my @hosts = @_; - my %js_lt = &Apache::lonlocal::texthash( - dump => 'Copying content to Authoring Space requires switching server.', - swit => 'Switch server?', - ); - my %html_js_lt = &Apache::lonlocal::texthash( + my %lt = &Apache::lonlocal::texthash( + dump => 'Dumping to Authoring Space requires switching server.', swit => 'Switch server?', - duco => 'Copying Content to Authoring Space', + duco => 'Dump content to Authoring Space', yone => 'You need to switch to a server housing an Authoring Space for which you are author or co-author.', chos => 'Choose server', ); - &js_escape(\%js_lt); - &html_escape(\%html_js_lt); - &js_escape(\%html_js_lt); my $role = $env{'request.role'}; my $js = <<"ENDSWJS";