--- loncom/interface/londocs.pm 2013/12/31 15:20:31 1.484.2.48 +++ loncom/interface/londocs.pm 2013/03/31 22:36:01 1.538 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.484.2.48 2013/12/31 15:20:31 raeburn Exp $ +# $Id: londocs.pm,v 1.538 2013/03/31 22:36:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,8 +41,6 @@ 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; @@ -58,7 +56,6 @@ my $hashtied; my %alreadyseen=(); my $hadchanges; -my $suppchanges; my %help=(); @@ -82,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); } @@ -143,28 +136,8 @@ sub clean { 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) { @@ -183,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 .= ' -
-

Content

'. -$contents{content}.' -
'; - } - if ($contents{webreferences}) { - $content .= ' -
-

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, @@ -656,8 +340,10 @@ sub group_import { } my $initialtext = &mt('Replace with your own content.'); my $newhtml = < + + + $name @@ -666,7 +352,7 @@ $initialtext END $env{'form.output'}=$newhtml; - my $result = + my $result = &Apache::lonnet::finishuserfileupload($coursenum,$coursedom, 'output', "$filepath/$residx/$fname.html"); @@ -691,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 = @@ -718,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); } @@ -811,7 +490,7 @@ sub docs_change_log { } my $folderpath=$env{'form.folderpath'}; if ($folderpath eq '') { - $folderpath = 'default&'.&escape(&mt('Main Content').':::::'); + $folderpath = 'default&'.&escape(&mt('Main '.$crstype.' Content').':::::'); } $pathitem = ''; @@ -1023,7 +702,7 @@ sub update_paste_buffer { my $url = $env{'docs.markedcopy_url_'.$suffix}; if (($cid =~ /^$match_domain(?:_)$match_courseid$/) && ($url ne '')) { - $pasteurls{$cid.'_'.$url} = 1; + $pasteurls{$cid.'_'.$url}; } } } @@ -1124,7 +803,6 @@ sub print_paste_buffer { my @currpaste = split(/,/,$env{'docs.markedcopies'}); my ($pasteitems,@pasteable); - my $clipboardcount = 0; # Construct identifiers for current contents of user's paste buffer foreach my $suffix (@currpaste) { @@ -1133,7 +811,6 @@ sub print_paste_buffer { my $url = $env{'docs.markedcopy_url_'.$suffix}; if (($cid =~ /^$match_domain\_$match_courseid$/) && ($url ne '')) { - $clipboardcount ++; my ($is_external,$othercourse,$fromsupp,$is_uploaded_map,$parent, $canpaste,$nopaste,$othercrs,$areachange); my $extension = (split(/\./,$env{'docs.markedcopy_url_'.$suffix}))[-1]; @@ -1157,7 +834,7 @@ sub print_paste_buffer { $othercourse = 1; if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) { if ($canpaste) { - $othercrs = '
    '.&mt('(from another course)'); + $othercrs = '
    '.&mt('(from another course).'); } } else { $canpaste = 0; @@ -1225,25 +902,13 @@ sub print_paste_buffer { my ($pasteform,$form_start,$buttons,$form_end); if ($pasteitems) { $pasteitems .= '
    '; - $form_start = '
    '; + $form_start = ''; if (@pasteable) { - my $value = &mt('Paste to current folder'); - if ($container eq 'page') { - $value = &mt('Paste to current page'); - } - $buttons = ''.(' 'x2); - } - $buttons .= ''.(' 'x2); - if ($clipboardcount > 1) { - $buttons .= - ''.(' 'x20).''.(' 'x2). - ''. - (' 'x2). - ''. - (' 'x2); + $buttons = ''.(' 'x2); } - $form_end = ''. - '
    '; + $buttons .= ''. + ''; + $form_end = ''; } else { $pasteitems = &mt('Clipboard is empty'); } @@ -1344,7 +1009,6 @@ sub paste_popup_js { my %lt = &Apache::lonlocal::texthash( show => 'Show Options', hide => 'Hide Options', - none => 'No items selected from clipboard.', ); return <<"END"; @@ -1374,51 +1038,11 @@ function showOptions(caller,suffix) { return; } -function validateClipboard() { - var numchk = 0; - if (document.pasteform.pasting.length > 1) { - for (var i=0; i 0) { - return true; - } else { - alert("$lt{'none'}"); - return false; - } -} - -function checkClipboard() { - if (document.pasteform.pasting.length > 1) { - for (var i=0; i1) { - for (var i=0; i{'src'}; + my $url = $dbref->{'src'}; if (ref($dbref) eq 'HASH') { if ($url =~ m{/(smppg|bulletinboard)$}) { my $prefix = $1; - if (($dbref->{'cdom'} =~ /^$match_domain$/) && + if (($dbref->{'cdom'} =~ /^$match_domain$/) && ($dbref->{'cnum'} =~ /^$match_courseid$/)) { my $db_name; my $marker = (split(m{/},$url))[4]; @@ -1928,7 +1553,7 @@ sub dbcopy { if ($prefix eq 'smppg') { $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a simple page [_1].',$url); } else { - $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a discussion board [_1].',$url); + $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a bulletin board [_1].',$url); } if ($error) { $errtext .= '
    '.$error; @@ -1942,12 +1567,12 @@ sub dbcopy { my $photo = $contents{'uploaded.photourl'}; my ($subdir,$fname) = ($photo =~ m{^/uploaded/$match_domain/$match_courseid/+(bulletin|simplepage)/(?:|\d+/)([^/]+)$}); - my $newphoto; + my $newphoto; if ($fname ne '') { my $content = &Apache::lonnet::getfile($photo); unless ($content eq '-1') { $env{'form.'.$suffix.'.photourl'} = $content; - $newphoto = + $newphoto = &Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$suffix.'.photourl',"$subdir/$suffix/$fname"); delete($env{'form.'.$suffix.'.photourl'}); } @@ -1964,18 +1589,16 @@ sub dbcopy { } } if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) { - $lockerrorsref->{$prefix} = + $lockerrorsref->{$prefix} = '
    '. &mt('There was a problem removing a lockfile.'); if ($prefix eq 'smppg') { - $lockerrorsref->{$prefix} .= - ' '.&mt('This will prevent creation of additional simple pages in this course.'); + $lockerrorsref->{$prefix} .= + &mt('This will prevent creation of additional simple pages in this course.'); } else { - $lockerrorsref->{$prefix} .= ' '.&mt('This will prevent creation of additional discussion boards in this course.'); + $lockerrorsref->{$prefix} .= &mt('This will prevent creation of additional bulletin boards in this course.'); } - $lockerrorsref->{$prefix} .= ' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.', - '',''). - '
    '; + $lockerrorsref->{$prefix} .= &mt('Please contact the domain coordinator for your LON-CAPA domain.').''; } } } elsif ($url =~ m{/syllabus$}) { @@ -2092,7 +1715,7 @@ sub url_paste_fixups { } next if ($token->[2]->{'type'} eq 'external'); if ($token->[2]->{'type'} eq 'zombie') { - next if ($skip); + next if ($skip); $zombies->{$oldurl}{$id} = $ressrc; $changed = 1; } elsif ($ressrc =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) { @@ -2538,7 +2161,7 @@ sub update_parameter { 'randomorder' => {}, ); foreach my $which (keys(%allchecked)) { - $env{'form.all'.$which} =~ s/,$//; + $env{'form.all'.$which} =~ s/,$//; if ($which eq 'randompick') { foreach my $item (split(/,/,$env{'form.all'.$which})) { my ($res,$value) = split(/:/,$item); @@ -2547,9 +2170,7 @@ sub update_parameter { } } } else { - if ($env{'form.all'.$which}) { - map { $allchecked{$which}{$_} = 1; } split(/,/,$env{'form.all'.$which}); - } + map { $allchecked{$which}{$_} = 1; } split(/,/,$env{'form.all'.$which}); } } my $haschanges = 0; @@ -2565,7 +2186,7 @@ sub update_parameter { foreach my $which (keys(%allchecked)) { if (($which eq 'randompick' || $which eq 'randomorder')) { next if (!$is_map); - } + } my $oldvalue = 0; my $newvalue = 0; if ($allchecked{$which}{$res}) { @@ -2623,9 +2244,7 @@ sub update_parameter { sub handle_edit_cmd { my ($coursenum,$coursedom) =@_; - if ($env{'form.cmd'} eq '') { - return 0; - } + return if ($env{'form.cmd'} eq ''); my ($cmd,$idx)=split('_',$env{'form.cmd'}); my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; @@ -2686,7 +2305,7 @@ sub editor { my $jumpto; unless ($supplementalflag) { - $jumpto = "uploaded/$coursedom/$coursenum/$folder.$container"; + $jumpto = "'uploaded/$coursedom/$coursenum/$folder.$container'"; } unless ($allowed) { @@ -2730,30 +2349,24 @@ sub editor { my ($paste_res,$save_error,$pastemsgarray,$lockerror) = &do_paste_from_buffer($coursenum,$coursedom,$folder,$container, \%paste_errors); - if (ref($pastemsgarray) eq 'ARRAY') { - if (@{$pastemsgarray} > 0) { - $r->print('

    '. - join('
    ',@{$pastemsgarray}). + if (ref($pastemsgarray) eq 'ARRAY') { + if (@{$pastemsgarray} > 0) { + + $r->print('

    '. + join('
    ',@{$pastemsgarray}). + '

    '); + } + } + if ($lockerror) { + $r->print('

    '. + $lockerror. '

    '); } - } - if ($lockerror) { - $r->print('

    '. - $lockerror. - '

    '); - } - if ($save_error ne '') { - return $save_error; - } - if ($paste_res) { - my %errortext = &Apache::lonlocal::texthash ( - fail => 'Storage of folder contents failed', - failread => 'Reading folder contents failed', - failstore => 'Storage of folder contents failed', - ); - if ($errortext{$paste_res}) { - $r->print('

    '.$errortext{$paste_res}.'

    '); + if ($save_error ne '') { + return $save_error; } + if ($paste_res ne 'ok') { + $r->print('

    '.$paste_res.'

    '); } if (keys(%paste_errors) > 0) { $r->print('

    '."\n". @@ -2953,13 +2566,9 @@ sub editor { my ($to_show,$output,@allidx,@allmapidx,%filters,%lists,%curr_groups); %filters = ( - canremove => [], - cancut => [], - cancopy => [], - hiddenresource => [], - encrypturl => [], - randomorder => [], - randompick => [], + canremove => [], + cancut => [], + cancopy => [], ); %curr_groups = &Apache::longroup::coursegroups(); &Apache::loncommon::start_data_table_count(); #setup a row counter @@ -2984,9 +2593,7 @@ sub editor { my $need_save; if (($allowed) || ($supplementalflag && $folder eq 'supplemental')) { - my $toolslink; - if ($allowed || &Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { - $toolslink = ''. ' - END } @@ -3616,9 +3191,6 @@ END my $rpckchk; if ($rpicknum) { $rpckchk = ' checked="checked"'; - if (($ishash) && (ref($filtersref->{'randompick'}) eq 'ARRAY')) { - push(@{$filtersref->{'randompick'}},$orderidx.':'.$rpicknum); - } } my $formname = 'edit_randompick_'.$orderidx; $rand_pick_text = @@ -3631,20 +3203,15 @@ $form_common."\n". } $rand_pick_text .= ''. $form_end; - my $ro_set; - if ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i) { - $ro_set = 'checked="checked"'; - if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) { - push(@{$filtersref->{'randomorder'}},$orderidx); - } - } - $formname = 'edit_rorder_'.$orderidx; + my $ro_set= + ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); + my $formname = 'edit_rorder_'.$orderidx; $rand_order_text = ''."\n". $form_param."\n". $form_common."\n". ''. -$form_end; +$form_end; } } elsif ($supplementalflag && !$allowed) { $url .= ($url =~ /\?/) ? '&':'?'; @@ -3714,19 +3281,10 @@ $form_end; my %lt=&Apache::lonlocal::texthash( 'hd' => 'Hidden', 'ec' => 'URL hidden'); - my ($enctext,$hidtext); - if ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) { - $enctext = ' checked="checked"'; - if (($ishash) && (ref($filtersref->{'encrypturl'}) eq 'ARRAY')) { - push(@{$filtersref->{'encrypturl'}},$orderidx); - } - } - if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { - $hidtext = ' checked="checked"'; - if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) { - push(@{$filtersref->{'hiddenresource'}},$orderidx); - } - } + my $enctext= + ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="checked"':''); + my $hidtext= + ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="checked"':''); my $formhidden = 'edit_hiddenresource_'.$orderidx; my $formurlhidden = 'edit_encrypturl_'.$orderidx; $line.=(<',''); + ' '.&mt('Please contact the domain coordinator for your LON-CAPA domain.'); } $locknotfreed .= ''; } @@ -4030,8 +3587,8 @@ sub list_symbs { sub verifycontent { my ($r) = @_; my $crstype = &Apache::loncommon::course_type(); - $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Content')); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Content')); + $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents')); $r->print(&startContentScreen('tools')); $r->print('

    '.&mt($crstype.' content verification').'

    '); $hashtied=0; @@ -4067,8 +3624,8 @@ sub devalidateversioncache { sub checkversions { my ($r) = @_; my $crstype = &Apache::loncommon::course_type(); - $r->print(&Apache::loncommon::start_page("Check $crstype Resource Versions")); - $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Resource Versions")); + $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions")); + $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions")); $r->print(&startContentScreen('tools')); my $header=''; @@ -4133,7 +3690,7 @@ sub checkversions { &changewarning($r,''); if ($env{'form.timerange'} eq 'all') { # show all documents - $header=&mt('All content in '.$crstype); + $header=&mt('All Documents in '.$crstype); $allsel=' selected="selected"'; foreach my $key (keys(%hash)) { if ($key=~/^ids\_(\/res\/.+)$/) { @@ -4224,30 +3781,10 @@ $lt{'sc'}:

    $lt{'vers'}

    + ENDHEADERS #number of columns for version history - my %changedbytime; - foreach my $key (keys(%changes)) { - #excludes not versionable problems from resource version history: - next if ($key =~ /^\/res\/lib\/templates/); - my $chg; - if ($env{'form.timerange'} eq 'all') { - my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); - $chg = &Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate'); - } else { - $chg = $changes{$key}; - next if ($chg < $starttime); - } - push(@{$changedbytime{$chg}},$key); - } - if (keys(%changedbytime) == 0) { - &untiehash(); - $r->print(&mt('No content changes in imported content in specified time frame'). - &endContentScreen()); - return; - } $r->print( - ''. &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). '
    '. @@ -4257,25 +3794,26 @@ ENDHEADERS ''. &Apache::loncommon::end_data_table_header_row() ); - foreach my $chg (sort {$b <=> $a } keys(%changedbytime)) { - foreach my $key (sort(@{$changedbytime{$chg}})) { - my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); - my $currentversion=&Apache::lonnet::getversion($key); - if ($currentversion<0) { - $currentversion=''.&mt('Could not be determined.').''; - } - my $linkurl=&Apache::lonnet::clutter($key); - $r->print( - &Apache::loncommon::start_data_table_row(). - ''. - ''. - ''. + ''. + ''); - # List all available versions - $r->print(''); + # List all available versions + $r->print(''.&Apache::loncommon::end_data_table_row()); + $r->print('
    '); } + $r->print(''.&Apache::loncommon::end_data_table_row()); } $r->print( &Apache::loncommon::end_data_table(). @@ -4332,7 +3869,6 @@ ENDHEADERS &untiehash(); $r->print(&endContentScreen()); - return; } sub mark_hash_old { @@ -4387,13 +3923,13 @@ $help{'Caching'}.'

    '."\n\n"); sub init_breadcrumbs { - my ($form,$text,$help)=@_; + my ($form,$text)=@_; &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs?tools=1", text=>&Apache::loncommon::course_type().' Editor', faq=>273, bug=>'Instructor Interface', - help => $help}); + help => 'Docs_Adding_Course_Doc'}); &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs?".$form.'=1', text=>$text, faq=>273, @@ -4429,9 +3965,10 @@ sub startContentScreen { if (($mode eq 'navmaps') || ($mode eq 'supplemental')) { $output .= '    '.&mt('Content Overview').'    '."\n"; $output .= '     '.&mt('Content Search').'     '."\n"; + $output .= '      '.&mt('Content Index').'      '."\n"; $output .= '
  • '.&mt('Supplemental Content').'
  • '; } else { - $output .= '
  •       '.&mt('Main Content Editor').'      
  • '."\n"; + $output .= '
  •       '.&mt('Content Editor').'      
  • '."\n"; $output .= '
  • '.&mt('Supplemental Content Editor').'
  • '."\n"; $output .= '
  •       '.&mt('Content Utilities').'      
  • '."\n"; '>      '.&mt('Content Utilities').'      '; @@ -4452,7 +3989,7 @@ sub endContentScreen { } sub supplemental_base { - return 'supplemental&'.&escape(&mt('Supplemental Content')); + return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Content')); } sub handler { @@ -4476,8 +4013,8 @@ sub handler { 'Adding_Folders','Docs_Overview', 'Load_Map', 'Supplemental','Score_Upload_Form','Adding_Pages', 'Importing_LON-CAPA_Resource','Importing_IMS_Course', - 'Uploading_From_Harddrive','Course_Roster','Web_Page', - 'Dropbox','Simple_Problem') { + 'Uploading_From_Harddrive', + 'Check_Resource_Versions','Verify_Content') { $help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); } # Composite help files @@ -4485,12 +4022,16 @@ sub handler { 'Docs_About_Syllabus,Docs_Editing_Templated_Pages'); $help{'Simple Page'} = &Apache::loncommon::help_open_topic( 'Docs_About_Simple_Page,Docs_Editing_Templated_Pages'); + $help{'Simple Problem'} = &Apache::loncommon::help_open_topic( + 'Option_Response_Simple'); $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic( 'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages'); $help{'My Personal Information Page'} = &Apache::loncommon::help_open_topic( 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); $help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); + $help{'Course Roster'} = &Apache::loncommon::help_open_topic('Docs_Course_Roster'); + $help{'Web Page'} = &Apache::loncommon::help_open_topic('Docs_Web_Page'); my $allowed; # URI is /adm/supplemental when viewing supplemental docs in non-edit mode. @@ -4505,7 +4046,7 @@ sub handler { &choose_dump_server($r); return OK; } elsif ($allowed && $env{'form.verify'}) { - &init_breadcrumbs('verify','Verify Content','Docs_Verify_Content'); + &init_breadcrumbs('verify','Verify Content'); &verifycontent($r); } elsif ($allowed && $env{'form.listsymbs'}) { &init_breadcrumbs('listsymbs','List Content IDs'); @@ -4518,10 +4059,10 @@ sub handler { } &docs_change_log($r,$coursenum,$coursedom,$folder,$allowed,$crstype,$iconpath); } elsif ($allowed && $env{'form.versions'}) { - &init_breadcrumbs('versions','Check/Set Resource Versions','Docs_Check_Resource_Versions'); + &init_breadcrumbs('versions','Check/Set Resource Versions'); &checkversions($r); } elsif ($allowed && $env{'form.dumpcourse'}) { - &init_breadcrumbs('dumpcourse','Copy '.&Apache::loncommon::course_type().' Content to Authoring Space'); + &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' Content to Authoring Space'); &dumpcourse($r); } elsif ($allowed && $env{'form.exportcourse'}) { &init_breadcrumbs('exportcourse','IMS Export'); @@ -4547,9 +4088,9 @@ sub handler { # supplementalflag=0: show standard documents # toolsflag=1: show utilities - my $unesc_folderpath = &unescape($env{'form.folderpath'}); - my $supplementalflag=($unesc_folderpath=~/^supplemental/); - if (($unesc_folderpath=~/^default/) || ($unesc_folderpath eq "")) { + $env{'form.folderpath'} = &unescape($env{'form.folderpath'}); + my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/); + if (($env{'form.folderpath'}=~/^default/) || ($env{'form.folderpath'} eq "")) { $supplementalflag=0; } if ($env{'form.forcesupplement'}) { $supplementalflag=1; } @@ -4581,7 +4122,7 @@ sub handler { } } elsif ($env{'form.command'} eq 'editdocs') { $env{'form.folderpath'} = 'default&'. - &escape(&mt('Main Content').':::::'); + &escape(&mt('Main '.$crstype.' Content').':::::'); &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => $env{'form.command'}}); } elsif ($env{'form.command'} eq 'editsupp') { $env{'form.folderpath'} = 'supplemental&'. @@ -4626,7 +4167,7 @@ sub handler { if ($supplementalflag) { $env{'form.folderpath'}=&supplemental_base(); } else { - $env{'form.folderpath'}='default&'.&escape(&mt('Main Content'). + $env{'form.folderpath'}='default'.&escape(&mt('Main '.$crstype.' Content'). ':::::'); } } @@ -4652,7 +4193,7 @@ sub handler { if ($env{'form.folder'} eq '' || $env{'form.folder'} eq 'supplemental') { $folderpath='default&'. - &escape(&mt('Main Content').':::::'); + &escape(&mt('Main '.$crstype.' Content').':::::'); } } $containertag = ''; @@ -4689,11 +4230,9 @@ sub handler { $script .= &dump_switchserver_js(@hosts); } } else { - my $tid = 1; my @tabids; if ($supplementalflag) { @tabids = ('002','ee2','ff2'); - $tid = 2; } else { @tabids = ('aa1','bb1','cc1','ff1'); unless ($env{'form.folderpath'} =~ /\:1$/) { @@ -4705,7 +4244,7 @@ sub handler { $script .= &editing_js($udom,$uname,$supplementalflag). &history_tab_js(). &inject_data_js(). - &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid). + &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr). &Apache::lonextresedit::extedit_javascript(); $addentries = { onload => "javascript:resize_scrollbox('contentscroll','1','1');", @@ -4730,14 +4269,6 @@ sub handler { if ($showdoc) { $r->print(&Apache::loncommon::start_page("$crstype documents",undef, {'force_register' => $showdoc,})); - } elsif ($toolsflag) { - &Apache::lonhtmlcommon::add_breadcrumb({ - href=>"/adm/coursedocs",text=>"$crstype Contents"}); - $r->print(&Apache::loncommon::start_page("$crstype Contents", $script) - .&Apache::loncommon::help_open_menu('','',273,'RAT') - .&Apache::lonhtmlcommon::breadcrumbs( - 'Editing Course Contents') - ); } elsif ($r->uri eq '/adm/supplemental') { my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype); $r->print(&Apache::loncommon::start_page("Supplemental $crstype Content",undef, @@ -4765,7 +4296,7 @@ sub handler { # Process file upload - phase one - upload and parse primary file. undef($hadchanges); $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom, - \%allfiles,\%codebase,$context,$crstype); + \%allfiles,\%codebase,$context); if ($hadchanges) { &mark_hash_old(); } @@ -4817,7 +4348,7 @@ sub handler { 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', @@ -4830,7 +4361,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', @@ -4838,8 +4369,8 @@ 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', @@ -4987,7 +4518,7 @@ HIDDENFORM 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 = ''; } @@ -5008,7 +4539,7 @@ HIDDENFORM my $newnavform=(< - + $pathitem @@ -5018,7 +4549,7 @@ HIDDENFORM NNFORM my $newsmppageform=(< - + $pathitem $lt{'sipa'} @@ -5032,7 +4563,7 @@ NSPFORM $pathitem $lt{'sipr'} - $help{'Simple_Problem'} + $help{'Simple Problem'} NSPROBFORM @@ -5043,7 +4574,6 @@ NSPROBFORM $pathitem $lt{'drbx'} - $help{'Dropbox'} NDBFORM @@ -5059,7 +4589,7 @@ NEXUFORM my $newbulform=(< - + $pathitem $lt{'bull'} @@ -5069,7 +4599,7 @@ NBFORM my $newaboutmeform=(< - + $pathitem @@ -5080,7 +4610,7 @@ NAMFORM my $newaboutsomeoneform=(< - + $pathitem $lt{'abou'} @@ -5089,12 +4619,12 @@ NASOFORM my $newrosterform=(< - + $pathitem $lt{'rost'} - $help{'Course_Roster'} + $help{'Course Roster'} NROSTFORM @@ -5110,11 +4640,11 @@ NROSTFORM } my $newwebpageform =(< - + $pathitem $lt{'webp'} - $help{'Web_Page'} + $help{'Web Page'} NWEBFORM @@ -5134,7 +4664,7 @@ my $newfolderb;
    - + $lt{'newp'} $help{'Adding_Pages'} @@ -5145,14 +4675,14 @@ NPFORM
    $pathitem - + $lt{'newf'}$help{'Adding_Folders'} NFFORM my $newsylform=(< - + $pathitem @@ -5164,7 +4694,7 @@ NSYLFORM my $newgroupfileform=(< - + $pathitem @@ -5191,7 +4721,7 @@ NGFFORM ); } push(@importdoc, - {''.$lt{upl}.''=>$fileuploadform} + {''.$lt{upl}.''=>$fileuploadform} ); $fileuploadform = &create_form_ul(&create_list_elements(@importdoc)); @@ -5213,14 +4743,14 @@ NGFFORM $communityform = &create_form_ul(&create_list_elements(@communityforma)); my %orderhash = ( - 'aa' => ['Upload',$fileuploadform], - 'bb' => ['Import',$importpubform], - 'cc' => ['Grading',$gradingform], + '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'} = ['Other',$specialdocumentsform]; + $orderhash{'ee'} = ['Special Pages',$specialdocumentsform]; } $hadchanges=0; @@ -5281,7 +4811,7 @@ SUPDOCFORM my $supnewfolderform=(< - + $pathitem $lt{'newf'} @@ -5331,7 +4861,7 @@ SNAMFORM $pathitem $lt{'webp'} - $help{'Web_Page'} + $help{'Web Page'} SWEBFORM @@ -5354,27 +4884,14 @@ 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); 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) { @@ -5523,7 +5040,7 @@ sub remove_archive { my $currcmd = $env{'form.cmd'}; my $position = $env{'form.position'}; if ($position > 0) { - $env{'form.cmd'} = 'remove_'.$position; + $env{'form.cmd'} = 'del_'.$position; my ($title,$url,@rrest) = split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$position]]); if (&handle_edit_cmd($docuname,$docudom)) { @@ -5558,13 +5075,13 @@ sub generate_admin_menu { 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'; @@ -5594,14 +5111,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", }, @@ -5626,7 +5143,7 @@ sub generate_admin_menu { { linktext => $lt{'dcd'}, url => $dumpurl, permission => $candump, - help => 'Docs_Dump_Course_Docs', + #help => '', icon => 'dump.png', linktitle => $lt{'dcd'}, }, @@ -5646,7 +5163,7 @@ sub generate_edit_table { my $form; my $activetab; my $active; - if (($env{'form.active'} ne '') && ($env{'form.active'} ne '00')) { + if (($env{'form.active'} ne '') && ($env{'form.active'} ne 'aa')) { $activetab = $env{'form.active'}; } my $backicon = $iconpath.'clickhere.gif'; @@ -5654,7 +5171,7 @@ sub generate_edit_table { $form = '
    '. '
    ' + my $toolslink = '' @@ -2996,7 +2603,6 @@ sub editor { .'class="LC_toolbarItem" ' .'title="'.&mt('Supplemental Content Editor').'">' .'
    ' .&Apache::loncommon::help_open_menu('Navigation Screen', 'Navigation_Screen',undef,'RAT') .''.&mt('Tools:').'

    '; - } if ($shown) { if ($allowed) { $to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') @@ -3012,23 +2618,19 @@ sub editor { if ($folder !~ /^supplemental/) { $lists{'canhide'} = join(',',@allidx); $lists{'canrandomlyorder'} = join(',',@allmapidx); - my @possfilters = ('canremove','cancut','cancopy','hiddenresource','encrypturl', - 'randomorder','randompick'); - foreach my $item (@possfilters) { + foreach my $item ('canremove','cancut','cancopy') { if (ref($filters{$item}) eq 'ARRAY') { - if (@{$filters{$item}} > 0) { - $lists{$item} = join(',',@{$filters{$item}}); - } + $lists{$item} = join(',',@{$filters{$item}}); } } if (@allidx > 0) { my $path; if ($env{'form.folderpath'}) { - $path = + $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); } if (@allidx > 1) { - $to_show .= + $to_show .= &Apache::loncommon::continue_data_table_row(). '
     '. @@ -3060,7 +2662,7 @@ sub editor { } $to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll') .'
    ' - .&mt('Currently empty') + .&mt('Currently no documents.') .'
    ' .&Apache::loncommon::end_scrollbox(); } @@ -3073,7 +2675,7 @@ sub editor { .''; } else { $to_show = '
    ' - .&mt('Currently empty') + .&mt('Currently no documents.') .'
    ' } } @@ -3140,11 +2742,7 @@ sub multiple_check_form { ''; if ($caller eq 'settings') { $output .= - ''."\n". - ''."\n". - ''."\n". - ''."\n". - ''."\n"; + ''; } elsif ($caller eq 'actions') { $output .= ''. @@ -3158,32 +2756,8 @@ sub multiple_check_form { } sub process_file_upload { - my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd,$crstype) = @_; + my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_; # upload a file, if present - my $filesize = length($env{'form.uploaddoc'}); - if (!$filesize) { - $$upload_output = '
    '. - &mt('Unable to upload [_1]. (size = [_2] bytes)', - ''.$env{'form.uploaddoc.filename'}.'', - $filesize).'
    '. - &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'
    '. - '
    '; - return; - } - my $quotatype = 'unofficial'; - if ($crstype eq 'Community') { - $quotatype = 'community'; - } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.instcode'}) { - $quotatype = 'official'; - } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.textbook'}) { - $quotatype = 'textbook'; - } - if (&Apache::loncommon::get_user_quota($coursenum,$coursedom,'course',$quotatype)) { - $filesize = int($filesize/1000); #expressed in kb - $$upload_output = &Apache::loncommon::excess_filesize_warning($coursenum,$coursedom,'course', - $env{'form.uploaddoc.filename'},$filesize,'upload'); - return if ($$upload_output); - } my ($parseaction,$showupload,$nextphase,$mimetype); if ($env{'form.parserflag'}) { $parseaction = 'parse'; @@ -3451,7 +3025,7 @@ END } if ($denied{'copy'}) { - $copylink=(<$lt{'cp'} ENDCOPY } else { @@ -3460,7 +3034,7 @@ ENDCOPY $copylink=(< $form_common -$lt{'cp'} +$lt{'cp'} $form_end ENDCOPY if (($ishash) && (ref($filtersref->{'cancopy'}) eq 'ARRAY')) { @@ -3477,8 +3051,7 @@ ENDCUT $cutlink=(< $form_common - -$lt{'ct'} +$lt{'ct'} $form_end ENDCUT if (($ishash) && (ref($filtersref->{'cancut'}) eq 'ARRAY')) { @@ -3495,17 +3068,18 @@ ENDREM $removelink=(< $form_common - -$lt{'rm'} +$lt{'rm'} $form_end ENDREM if (($ishash) && (ref($filtersref->{'canremove'}) eq 'ARRAY')) { push(@{$filtersref->{'canremove'}},$orderidx); } } - $renamelink=(<$lt{'rn'} ENDREN + } $line.=(<
    @@ -3526,10 +3100,11 @@ ENDREN $selectbox $form_end
    + $removelink $cutlink $copylink +
    '.&mt('Resources').''.&mt('History').''.&Apache::lonnet::gettitle($linkurl).'
    '. - ''.$linkurl.'
    '.$currentversion.'
    ('. - &Apache::lonlocal::locallocaltime($chg).')
    ' - ); - # Used in course - my $usedversion=$hash{'version_'.$linkurl}; - if (($usedversion) && ($usedversion ne 'mostrecent')) { + foreach my $key (sort(keys(%changes))) { + #excludes not versionable problems from resource version history: + next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/); + my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); + my $currentversion=&Apache::lonnet::getversion($key); + if ($currentversion<0) { + $currentversion=''.&mt('Could not be determined.').''; + } + my $linkurl=&Apache::lonnet::clutter($key); + $r->print( + &Apache::loncommon::start_data_table_row(). + ''.&Apache::lonnet::gettitle($linkurl).'
    '. + ''.$linkurl.'
    '.$currentversion.'
    ('. + &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate')).')
    ' + ); + # Used in course + my $usedversion=$hash{'version_'.$linkurl}; + if (($usedversion) && ($usedversion ne 'mostrecent')) { if ($usedversion != $currentversion) { $r->print(''.$usedversion.''); } else { @@ -4284,45 +3822,44 @@ ENDHEADERS } else { $r->print($currentversion); } - $r->print(''); - # Set version - $r->print(&Apache::loncommon::select_form( - $setversions{$linkurl}, - 'set_version_'.$linkurl, - {'select_form_order' => ['',1..$currentversion,'mostrecent'], - '' => '', - 'mostrecent' => &mt('most recent'), - map {$_,$_} (1..$currentversion)})); - my $lastold=1; - for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { - my $url=$root.'.'.$prevvers.'.'.$extension; - if (&Apache::lonnet::metadata($url,'lastrevisiondate')<$starttime) { - $lastold=$prevvers; - } - } - $r->print(''); - for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { - my $url=$root.'.'.$prevvers.'.'.$extension; - $r->print( - '' - .'' - .&mt('Version [_1]',$prevvers).'' - .' ('.&Apache::lonlocal::locallocaltime( + $r->print(''); + # Set version + $r->print(&Apache::loncommon::select_form( + $setversions{$linkurl}, + 'set_version_'.$linkurl, + {'select_form_order' => ['',1..$currentversion,'mostrecent'], + '' => '', + 'mostrecent' => &mt('most recent'), + map {$_,$_} (1..$currentversion)})); + my $lastold=1; + for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { + my $url=$root.'.'.$prevvers.'.'.$extension; + if (&Apache::lonnet::metadata($url,'lastrevisiondate')<$starttime) { + $lastold=$prevvers; + } + } + $r->print(''); + for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { + my $url=$root.'.'.$prevvers.'.'.$extension; + $r->print( + '' + .'' + .&mt('Version [_1]',$prevvers).'' + .' ('.&Apache::lonlocal::locallocaltime( &Apache::lonnet::metadata($url,'lastrevisiondate')) - .')'); - if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') { - $r->print( - ' &'). - '" target="diffs">'.&mt('Diffs').''); - } - $r->print('
    '); + .')'); + if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') { + $r->print( + ' &'). + '" target="diffs">'.&mt('Diffs').''); } - $r->print('