--- loncom/interface/londocs.pm 2005/09/01 23:20:05 1.205 +++ loncom/interface/londocs.pm 2006/06/30 03:44:03 1.236 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.205 2005/09/01 23:20:05 albertel Exp $ +# $Id: londocs.pm,v 1.236 2006/06/30 03:44:03 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,6 +42,8 @@ use HTML::Entities; use GDBM_File; use Apache::lonlocal; use Cwd; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; my $iconpath; @@ -119,16 +121,18 @@ sub authorhosts { sub dumpbutton { my ($home,$other,%outhash)=&authorhosts(); + my $type = &Apache::loncommon::course_type(); if ($home+$other==0) { return ''; } my $output=''; if ($home) { return ''. ''. + &mt('Dump '.$type.' DOCS to Construction Space').'" />'. &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs'); } else { return''. - &mt('Dump Course DOCS to Construction Space: available on other servers'); + &mt('Dump '.$type. + ' DOCS to Construction Space: available on other servers'); } } @@ -140,10 +144,9 @@ sub clean { # -------------------------------------------------------- Actually dump course sub dumpcourse { - my $r=shift; - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'Dump DOCS'. - &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space'). + my ($r) = @_; + my $type = &Apache::loncommon::course_type(); + $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space'). '
'); my ($home,$other,%outhash)=&authorhosts(); unless ($home) { return ''; } @@ -222,7 +225,7 @@ sub dumpcourse { $r->print(''); } my $title=$origcrsdata{'description'}; - $title=~s/\s+/\_/gs; + $title=~s/[\/\s]+/\_/gs; $title=&clean($title); $r->print('

'.&mt('Folder in Construction Space').'


'); &tiehash(); @@ -234,8 +237,10 @@ sub dumpcourse { 'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}}; $title=~s/:/:/g; $r->print(''.($title?$title:' ').''); - unless ($title) { + if (!$title) { $title=$_; + } else { + $title=~s|/|_|g; } $title=~s/\.(\w+)$//; $title=&clean($title); @@ -245,21 +250,23 @@ sub dumpcourse { $r->print("\n"); &untiehash(); $r->print( - '

'); + '

'); } } # ------------------------------------------------------ Generate "export" button sub exportbutton { + my $type = &Apache::loncommon::course_type(); return ''. ''. + &mt('Export '.$type.' to IMS').'" />'. &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs'); } sub exportcourse { my $r=shift; + my $type = &Apache::loncommon::course_type(); my %discussiontime = &Apache::lonnet::dump('discussiontimes', $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); my $numdisc = keys %discussiontime; @@ -300,7 +307,7 @@ sub exportcourse { open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); close(OUTPUT); chdir $cwd; - $outcome .= 'Download the zip file from IMS course archive
'; + $outcome .= &mt('Download the zip file from IMS '.lc($type).' archive
',$imszipfile,); if ($copyresult) { $outcome .= 'The following errors occurred during export - '.$copyresult; } @@ -308,15 +315,13 @@ sub exportcourse { $outcome = '
Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.
'; } } - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'Export Course'. - &Apache::loncommon::bodytag('Export course to IMS content package')); + $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package')); $r->print($outcome); - $r->print(''); + $r->print(&Apache::loncommon::end_page()); } else { my $display; $display = '
'."\n"; - $display .= 'Choose which items you wish to export from your course.

'; + $display .= &mt('Choose which items you wish to export from your '.$type.'.

'); $display .= ''. '
 Content items'. ' |; - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'Export Course'.$scripttag.''. - &Apache::loncommon::bodytag('Export course to IMS content package' -)); - - $r->print($display.'
'. + $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package', + $scripttag)); + $r->print($display.''. '

'. '

'); + &mt('Export '.$type.' DOCS').'" />

'. + &Apache::loncommon::end_page()); } } @@ -953,11 +956,10 @@ sub breadcrumbs { my $folderpath; my $cpinfo=''; if ($env{'form.markedcopy_url'}) { - &Apache::lonnet::logthis('Found '.$env{'form.markedcopy_url'}); $cpinfo='&markedcopy_url='. - &Apache::lonnet::escape($env{'form.markedcopy_url'}). + &escape($env{'form.markedcopy_url'}). '&markedcopy_title='. - &Apache::lonnet::escape($env{'form.markedcopy_title'}); + &escape($env{'form.markedcopy_title'}); } while (@folders) { my $folder=shift(@folders); @@ -965,18 +967,18 @@ sub breadcrumbs { if ($folderpath) {$folderpath.='&';} $folderpath.=$folder.'&'.$foldername; my $url='/adm/coursedocs?folderpath='. - &Apache::lonnet::escape($folderpath); + &escape($folderpath); &Apache::lonhtmlcommon::add_breadcrumb( {'href'=>$url.$cpinfo, - 'title'=>&Apache::lonnet::unescape($foldername), + 'title'=>&unescape($foldername), 'text'=>''. - &Apache::lonnet::unescape($foldername).'' + &unescape($foldername).'' }); } - return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef, - 0,'nohelp'); + return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', + 'LC_docs_path'); } sub editor { @@ -1114,7 +1116,7 @@ sub editor { if ($cmd eq 'del') { my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]); if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) && - ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library)$/)) { + ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) { &Apache::lonnet::removeuploadedurl($url); } else { &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]); @@ -1173,11 +1175,12 @@ sub editor { # Group import/search if ($env{'form.importdetail'}) { my @imports; + &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'}); foreach (split(/\&/,$env{'form.importdetail'})) { if (defined($_)) { my ($name,$url)=split(/\=/,$_); - $name=&Apache::lonnet::unescape($name); - $url=&Apache::lonnet::unescape($url); + $name=&unescape($name); + $url=&unescape($url); push @imports, $name, $url; } } @@ -1190,22 +1193,25 @@ sub editor { } } # Loading a complete map - if (($env{'form.importmap'}) && ($env{'form.loadmap'})) { - foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) { - my ($title,$url,$ext,$type)=split(/\:/,$_); - my $idx=&Apache::lonratedt::getresidx($url); - $Apache::lonratedt::resources[$idx]=$_; - $Apache::lonratedt::order - [$#Apache::lonratedt::order+1]=$idx; - } - + if ($env{'form.loadmap'}) { + if ($env{'form.importmap'}=~/\w/) { + foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) { + my ($title,$url,$ext,$type)=split(/\:/,$_); + my $idx=&Apache::lonratedt::getresidx($url); + $Apache::lonratedt::resources[$idx]=$_; + $Apache::lonratedt::order + [$#Apache::lonratedt::order+1]=$idx; + } # Store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom, + ($errtext,$fatal)=&storemap($coursenum,$coursedom, $folder.'.'.$container); - if ($fatal) { - $r->print('

'.$errtext.'

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

'.$errtext.'

'); + return; + } + } else { + $r->print('

'.&mt('No map selected.').'

'); + } } } # ---------------------------------------------------------------- End commands @@ -1215,6 +1221,8 @@ sub editor { $r->print(''); foreach (@Apache::lonratedt::order) { my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); + $name=&Apache::lonratsrv::qtescape($name); + $url=&Apache::lonratsrv::qtescape($url); unless ($name) { $name=(split(/\//,$url))[-1]; } unless ($name) { $idx++; next; } $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); @@ -1325,14 +1333,14 @@ sub process_file_upload { method="post" enctype="multipart/form-data"> - + '; $$upload_output .= 'Upload embedded files:
'; foreach my $embed_file (keys(%{$allfiles})) { $$upload_output .= ''; $num ++; @@ -1371,7 +1379,7 @@ sub process_secondary_uploads { if (($folder eq 'default') || ($folder eq 'supplemental')) { $destination .= 'default/'; } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { - $destination .= $1.'/'; + $destination .= $2.'/'; } $destination .= $newidx; my ($url,$filename); @@ -1386,7 +1394,7 @@ sub entryline { my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_; $title=~s/\&colon\;/\:/g; $title=&HTML::Entities::encode(&HTML::Entities::decode( - &Apache::lonnet::unescape($title)),'"<>&\''); + &unescape($title)),'"<>&\''); my $renametitle=$title; my $foldertitle=$title; my $pagetitle=$title; @@ -1398,6 +1406,7 @@ sub entryline { &Apache::loncommon::plainname($2,$3).':
'. $foldertitle; } + $renametitle=~s/\\/\\\\/g; $renametitle=~s/\"\;/\\\"/g; my $line=''; # Edit commands @@ -1405,21 +1414,21 @@ sub entryline { my $folderpath; if ($env{'form.folderpath'}) { $container = 'sequence'; - $folderpath=&Apache::lonnet::escape($env{'form.folderpath'}); + $folderpath=&escape($env{'form.folderpath'}); # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"'); } my ($pagepath,$pagesymb); if ($env{'form.pagepath'}) { $container = 'page'; - $pagepath=&Apache::lonnet::escape($env{'form.pagepath'}); - $pagesymb=&Apache::lonnet::escape($env{'form.pagesymb'}); + $pagepath=&escape($env{'form.pagepath'}); + $pagesymb=&escape($env{'form.pagesymb'}); } my $cpinfo=''; if ($env{'form.markedcopy_url'}) { $cpinfo='&markedcopy_url='. - &Apache::lonnet::escape($env{'form.markedcopy_url'}). + &escape($env{'form.markedcopy_url'}). '&markedcopy_title='. - &Apache::lonnet::escape($env{'form.markedcopy_title'}); + &escape($env{'form.markedcopy_title'}); } if ($allowed) { my $incindex=$index+1; @@ -1451,7 +1460,24 @@ sub entryline { 'ct' => 'Cut', 'rn' => 'Rename', 'cp' => 'Copy'); + my $nocopy=0; + if ($url=~/\.(page|sequence)$/) { + foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) { + my ($title,$url,$ext,$type)=split(/\:/,$_); + if (($url=~/\.(page|sequence)/) && ($type ne 'zombie')) { + $nocopy=1; + last; + } + } + } + my $copylink=' '; if ($env{'form.pagepath'}) { + unless ($nocopy) { + $copylink=(< +$lt{'cp'} +ENDCOPY + } $line.=(< @@ -1475,10 +1501,15 @@ sub entryline { $lt{'ct'} $lt{'rn'} - -$lt{'cp'} +$copylink END } else { + unless ($nocopy) { + $copylink=(< +$lt{'cp'} +ENDCOPY + } $line.=(< @@ -1501,8 +1532,7 @@ END $lt{'ct'} $lt{'rn'} - -$lt{'cp'} +$copylink END } } @@ -1532,7 +1562,7 @@ END &Apache::lonnet::allowuploaded('/adm/coursedoc',$url); } } - $url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//; + $url=~s-^http(\&colon\;|:)//-/adm/wrapper/ext/-; if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) { my $symb=&Apache::lonnet::symbclean( &Apache::lonnet::declutter('uploaded/'. @@ -1556,21 +1586,21 @@ END } elsif ($url=~m|^/ext/|) { $url='/adm/wrapper'.$url; } - $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); + $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); if ($container eq 'page') { my $symb=$env{'form.pagesymb'}; $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); - $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); + $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); } } my $parameterset=' '; - if ($isfolder) { - my $foldername=&Apache::lonnet::escape($foldertitle); + if ($isfolder || $extension eq 'sequence') { + my $foldername=&escape($foldertitle); my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $folderpath.='&' }; $folderpath.=$folderarg.'&'.$foldername; - $url.='folderpath='.&Apache::lonnet::escape($folderpath).$cpinfo; + $url.='folderpath='.&escape($folderpath).$cpinfo; $parameterset='"; + ""; if (($allowed) && ($folder!~/^supplemental/)) { my %lt=&Apache::lonlocal::texthash( 'hd' => 'Hidden', @@ -1643,13 +1673,14 @@ sub tiehash { sub untiehash { if ($hashtied) { untie %hash; } $hashtied=0; + return OK; } # --------------------------------------------------------------- check on this sub checkonthis { my ($r,$url,$level,$title)=@_; - $url=&Apache::lonnet::unescape($url); + $url=&unescape($url); $alreadyseen{$url}=1; $r->rflush(); if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) { @@ -1719,29 +1750,45 @@ sub checkonthis { # +# ----------------------------------------------------------------- List Symbs +# +sub list_symbs { + my ($r) = @_; + + $r->print(&Apache::loncommon::start_page('Symb List')); + my $navmap = Apache::lonnavmaps::navmap->new(); + $r->print("
\n");
+    foreach my $res ($navmap->retrieveResources()) {
+	$r->print($res->compTitle()."\t".$res->symb()."\n");
+    }
+    $r->print("\n
\n"); + $r->print(''.&mt('Return to DOCS').''); +} + + +# # -------------------------------------------------------------- Verify Content # sub verifycontent { - my $r=shift; + my ($r) = @_; + my $type = &Apache::loncommon::course_type(); my $loaderror=&Apache::lonnet::overloaderror($r); if ($loaderror) { return $loaderror; } - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'Verify Content'. - &Apache::loncommon::bodytag('Verify Course Documents')); + $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents')); $hashtied=0; undef %alreadyseen; %alreadyseen=(); &tiehash(); foreach (keys %hash) { if ($hash{$_}=~/\.(page|sequence)$/) { - if (($_=~/^src_/) && ($alreadyseen{&Apache::lonnet::unescape($hash{$_})})) { + if (($_=~/^src_/) && ($alreadyseen{&unescape($hash{$_})})) { $r->print('
'. - &mt('The following sequence or page is included more than once in your course: '). - &Apache::lonnet::unescape($hash{$_}).'
'. + &mt('The following sequence or page is included more than once in your '.$type.': '). + &unescape($hash{$_}).'
'. &mt('Note that grading records for problems included in this sequence or folder will overlap.
')); } } - if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&Apache::lonnet::unescape($hash{$_})})) { + if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$_})})) { &checkonthis($r,$hash{$_},0,$hash{'title_'.$1}); } } @@ -1760,10 +1807,9 @@ sub devalidateversioncache { } sub checkversions { - my $r=shift; - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'Check Versions'. - &Apache::loncommon::bodytag('Check Course Document Versions')); + my ($r) = @_; + my $type = &Apache::loncommon::course_type(); + $r->print(&Apache::loncommon::start_page("Check $type Document Versions")); my $header=''; my $startsel=''; my $monthsel=''; @@ -1824,7 +1870,7 @@ sub checkversions { &changewarning($r,''); if ($env{'form.timerange'} eq 'all') { # show all documents - $header=&mt('All Documents in Course'); + $header=&mt('All Documents in '.$type); $allsel=1; foreach (keys %hash) { if ($_=~/^ids\_(\/res\/.+)$/) { @@ -1869,7 +1915,7 @@ sub checkversions { $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); my %lt=&Apache::lonlocal::texthash - ('st' => 'Version changes since start of Course', + ('st' => 'Version changes since start of '.$type, 'lm' => 'Version changes since last Month', 'lw' => 'Version changes since last Week', 'sy' => 'Version changes since Yesterday', @@ -1878,9 +1924,9 @@ sub checkversions { 'fi' => 'File', 'md' => 'Modification Date', 'mr' => 'Most recently published Version', - 've' => 'Version used in Course', - 'vu' => 'Set Version to be used in Course', -'sv' => 'Set Versions to be used in Course according to Selections below', + 've' => 'Version used in '.$type, + 'vu' => 'Set Version to be used in '.$type, +'sv' => 'Set Versions to be used in '.$type.' according to Selections below', 'sm' => 'Keep all Resources up-to-date with most recent Versions (default)', 'sc' => 'Set all Resource Versions to current Version (Fix Versions)', 'di' => 'Differences'); @@ -1927,7 +1973,7 @@ ENDHEADERS ''. - '
'.$embed_file. ' - '; + '; my $attrib; if (@{$$allfiles{$embed_file}} > 1) { $attrib = join(':',@{$$allfiles{$embed_file}}); @@ -1343,7 +1351,7 @@ sub process_file_upload { ''; if (exists($$codebase{$embed_file})) { $$upload_output .= - ''; + ''; } $$upload_output .= '
$title$titleMost Recent: '. ''.$currentversion.''. 'In Course: '. + 'In '.$type.': '. ''); # Used in course my $usedversion=$hash{'version_'.$linkurl}; @@ -2031,15 +2077,16 @@ sub changewarning { my ($r,$postexec,$message,$url)=@_; if (!&is_hash_old()) { return; } my $pathvar='folderpath'; - my $path=&Apache::lonnet::escape($env{'form.folderpath'}); + my $path=&escape($env{'form.folderpath'}); if (!defined($url)) { if (defined($env{'form.pagepath'})) { $pathvar='pagepath'; - $path=&Apache::lonnet::escape($env{'form.pagepath'}); - $path.='&pagesymb='.&Apache::lonnet::escape($env{'form.pagesymb'}); + $path=&escape($env{'form.pagepath'}); + $path.='&pagesymb='.&escape($env{'form.pagesymb'}); } $url='/adm/coursedocs?'.$pathvar.'='.$path; } + my $course_type = &Apache::loncommon::course_type(); if (!defined($message)) { $message='Changes will become active for your current session after [_1], or the next time you log in.'; } @@ -2050,7 +2097,7 @@ sub changewarning { '" />

'. &mt($message,' '). + &mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />'). $help{'Caching'}.'

'."\n\n"); } @@ -2060,16 +2107,17 @@ sub handler { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; + my $type = &Apache::loncommon::course_type(); # --------------------------------------------- Initialize help topics for this - foreach ('Adding_Course_Doc','Main_Course_Documents', - 'Adding_External_Resource','Navigate_Content', - 'Adding_Folders','Docs_Overview', 'Load_Map', - 'Supplemental','Score_Upload_Form','Adding_Pages', - 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', - 'Check_Resource_Versions','Verify_Content') { - $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); - } + foreach ('Adding_Course_Doc','Main_Course_Documents', + 'Adding_External_Resource','Navigate_Content', + 'Adding_Folders','Docs_Overview', 'Load_Map', + 'Supplemental','Score_Upload_Form','Adding_Pages', + 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', + 'Check_Resource_Versions','Verify_Content') { + $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); + } # Composite help files $help{'Syllabus'} = &Apache::loncommon::help_open_topic( 'Docs_About_Syllabus,Docs_Editing_Templated_Pages'); @@ -2083,13 +2131,18 @@ sub handler { 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); - if ($env{'form.verify'}) { +# does this user have privileges to modify docs + my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); + + if ($allowed && $env{'form.verify'}) { &verifycontent($r); - } elsif ($env{'form.versions'}) { + } elsif ($allowed && $env{'form.listsymbs'}) { + &list_symbs($r); + } elsif ($allowed && $env{'form.versions'}) { &checkversions($r); - } elsif ($env{'form.dumpcourse'}) { + } elsif ($allowed && $env{'form.dumpcourse'}) { &dumpcourse($r); - } elsif ($env{'form.exportcourse'}) { + } elsif ($allowed && $env{'form.exportcourse'}) { &exportcourse($r); } else { # is this a standard course? @@ -2098,21 +2151,21 @@ sub handler { my $forcestandard = 0; my $forcesupplement; my $script=''; - my $allowed; - my $events=''; my $showdoc=0; my $containertag; my $uploadtag; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['folderpath','pagepath','pagesymb','markedcopy_url','markedcopy_title']); + ['folderpath','pagepath', + 'pagesymb','markedcopy_url', + 'markedcopy_title']); if ($env{'form.folderpath'}) { my (@folderpath)=split('&',$env{'form.folderpath'}); - $env{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath)); + $env{'form.foldername'}=&unescape(pop(@folderpath)); $env{'form.folder'}=pop(@folderpath); } if ($env{'form.pagepath'}) { my (@pagepath)=split('&',$env{'form.pagepath'}); - $env{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath)); + $env{'form.pagename'}=&unescape(pop(@pagepath)); $env{'form.folder'}=pop(@pagepath); $containertag = ''. ''; @@ -2124,213 +2177,42 @@ sub handler { } unless ($showdoc) { # got called from remote if (($env{'form.folder'}=~/^default_/) || - ($env{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) { + ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) { $forcestandard = 1; } $forcesupplement=($env{'form.folder'}=~/^supplemental_/); -# does this user have privileges to post, etc? - $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); if ($allowed) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']); $script=&Apache::lonratedt::editscript('simple'); } } else { # got called in sequence from course $allowed=0; - $script=''.&Apache::lonmenu::registerurl(1,undef).' -ENDDOCUMENT - if ($allowed) { - $r->print(< -function makenewfolder(targetform,folderseq) { - var foldername=prompt('Name of New Folder','New Folder'); - if (foldername) { - targetform.importdetail.value=foldername+"="+folderseq; - targetform.submit(); - } -} - -function makenewpage(targetform,folderseq) { - var pagename=prompt('Name of New Page','New Page'); - if (pagename) { - targetform.importdetail.value=pagename+"="+folderseq; - targetform.submit(); - } -} - -function makenewext(targetname) { - this.document.forms.extimport.useform.value=targetname; - window.open('/adm/rat/extpickframe.html'); -} - -function makeexamupload() { - var title=prompt('Listed Title for the Uploaded Score'); - if (title) { - this.document.forms.newexamupload.importdetail.value= - title+'=/res/lib/templates/examupload.problem'; - this.document.forms.newexamupload.submit(); - } -} - -function makesmppage() { - var title=prompt('Listed Title for the Page'); - if (title) { - this.document.forms.newsmppg.importdetail.value= - title+'=/adm/$udom/$uname/$now/smppg'; - this.document.forms.newsmppg.submit(); - } -} - -function makesmpproblem() { - var title=prompt('Listed Title for the Problem'); - if (title) { - this.document.forms.newsmpproblem.importdetail.value= - title+'=/res/lib/templates/simpleproblem.problem'; - this.document.forms.newsmpproblem.submit(); - } -} - -function makebulboard() { - var title=prompt('Listed Title for the Bulletin Board'); - if (title) { - this.document.forms.newbul.importdetail.value= - title+'=/adm/$udom/$uname/$now/bulletinboard'; - this.document.forms.newbul.submit(); - } -} - -function makeabout() { - var user=prompt("Enter user\@domain for User's 'About Me' Page"); - if (user) { - var comp=new Array(); - comp=user.split('\@'); - if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) { - if ((comp[0]) && (comp[1])) { - this.document.forms.newaboutsomeone.importdetail.value= - 'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme'; - this.document.forms.newaboutsomeone.submit(); - } else { - alert("Not a valid user\@domain"); - } - } else { - alert("Please enter both user and domain in the format user\@domain"); - } - } -} - -function makeims() { - var caller = document.forms.ims.folder.value; - var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one"; - newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes"); - newWindow.location.href = newlocation; -} - - -function finishpick() { - var title=this.document.forms.extimport.title.value; - var url=this.document.forms.extimport.url.value; - var form=this.document.forms.extimport.useform.value; - eval - ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+ - '";this.document.forms.'+form+'.submit();'); -} - -function changename(folderpath,index,oldtitle,container,pagesymb) { - var title=prompt('New Title',oldtitle); - if (title) { - this.document.forms.renameform.title.value=title; - this.document.forms.renameform.cmd.value='rename_'+index; - if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; - } - if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; - } - this.document.forms.renameform.submit(); - } -} - -function removeres(folderpath,index,oldtitle,container,pagesymb) { - if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) { - this.document.forms.renameform.cmd.value='del_'+index; - if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; - } - if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; - } - this.document.forms.renameform.submit(); - } -} - -function cutres(folderpath,index,oldtitle,container,pagesymb) { - if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) { - this.document.forms.renameform.cmd.value='cut_'+index; - this.document.forms.renameform.markcopy.value=index; - if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; - } - if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; - } - this.document.forms.renameform.submit(); - } -} - -function markcopy(folderpath,index,oldtitle,container,pagesymb) { - this.document.forms.renameform.markcopy.value=index; - if (container == 'sequence') { - this.document.forms.renameform.folderpath.value=folderpath; - } - if (container == 'page') { - this.document.forms.renameform.pagepath.value=folderpath; - this.document.forms.renameform.pagesymb.value=pagesymb; + if ($allowed) { + $script .= &editing_js($udom,$uname); } - this.document.forms.renameform.submit(); -} - - - -ENDNEWSCRIPT - } # -------------------------------------------------------------------- Body tag - $r->print(''. - &Apache::loncommon::bodytag('Course Documents','',$events, - '','',$showdoc). - &Apache::loncommon::help_open_menu('','','','',273,'RAT')); + $script = ''; + $r->print(&Apache::loncommon::start_page("$type Documents", $script, + {'force_register' => $showdoc,}). + &Apache::loncommon::help_open_menu('','',273,'RAT')); + my %allfiles = (); my %codebase = (); my ($upload_result,$upload_output); @@ -2349,15 +2231,15 @@ ENDNEWSCRIPT my %attribs = (); my $updateflag = 0; my $residx = $env{'form.newidx'}; - my $primary_url = &Apache::lonnet::unescape($env{'form.primaryurl'}); + my $primary_url = &unescape($env{'form.primaryurl'}); # Process file upload - phase two - gather secondary files. for (my $i=0; $i<$env{'form.phasetwo'}; $i++) { if ($env{'form.embedded_item_'.$i.'.filename'}) { my $javacodebase; $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx); - $origname{$i} = &Apache::lonnet::unescape($env{'form.embedded_orig_'.$i}); + $origname{$i} = &unescape($env{'form.embedded_orig_'.$i}); if (exists($env{'form.embedded_codebase_'.$i})) { - $javacodebase = &Apache::lonnet::unescape($env{'form.embedded_codebase_'.$i}); + $javacodebase = &unescape($env{'form.embedded_codebase_'.$i}); $origname{$i} =~ s#^\Q$javacodebase\E/##; } my @attributes = (); @@ -2367,7 +2249,7 @@ ENDNEWSCRIPT @attributes = ($env{'form.embedded_attrib_'.$i}); } foreach (@attributes) { - push(@{$attribs{$i}},&Apache::lonnet::unescape($_)); + push(@{$attribs{$i}},&unescape($_)); } if ($javacodebase) { $codebase{$i} = $javacodebase; @@ -2398,7 +2280,7 @@ ENDNEWSCRIPT $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi; } if (exists($codebase{$item})) { - $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; + $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs } } # Save edited file. @@ -2416,8 +2298,8 @@ ENDNEWSCRIPT unless ($showdoc || $upload_result eq 'phasetwo') { # ----------------------------------------------------------------------------- my %lt=&Apache::lonlocal::texthash( - 'uplm' => 'Upload a new main course document', - 'upls' => 'Upload a new supplemental course document', + 'uplm' => 'Upload a new main '.lc($type).' document', + 'upls' => 'Upload a new supplemental '.lc($type).' document', 'impp' => 'Import a document', 'pubd' => 'Published documents', 'copm' => 'All documents out of a published map into this folder', @@ -2425,6 +2307,7 @@ ENDNEWSCRIPT 'upld' => 'Upload Document', 'srch' => 'Search', 'impo' => 'Import', + 'book' => 'Import Bookmarks', 'selm' => 'Select Map', 'load' => 'Load Map', 'reco' => 'Recover Deleted Resources', @@ -2435,6 +2318,7 @@ ENDNEWSCRIPT 'navc' => 'Navigate Contents', 'sipa' => 'Simple Page', 'sipr' => 'Simple Problem', + 'drbx' => 'Drop Box', 'scuf' => 'Score Upload Form', 'bull' => 'Bulletin Board', 'mypi' => 'My Personal Info', @@ -2452,6 +2336,7 @@ ENDNEWSCRIPT my %lt=&Apache::lonlocal::texthash( 'vc' => 'Verify Content', 'cv' => 'Check/Set Resource Versions', + 'ls' => 'List Symbs', ); my $folderpath=$env{'form.folderpath'}; @@ -2459,7 +2344,7 @@ ENDNEWSCRIPT if ($env{'form.folder'} eq '' || $env{'form.folder'} eq 'supplemental') { $folderpath='default&'. - &Apache::lonnet::escape(&mt('Main Course Documents')); + &escape(&mt('Main '.$type.' Documents')); } } unless ($env{'form.pagepath'}) { @@ -2486,11 +2371,13 @@ $uploadtag $help{'Check_Resource_Versions'} $dumpbut $exportbut +
+
ENDCOURSEVERIFY $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc', - &mt('Editing the Table of Contents for your Course'))); + &mt('Editing the Table of Contents for your '.$type))); } # --------------------------------------------------------- Standard documents $r->print(''); @@ -2501,7 +2388,7 @@ ENDCOURSEVERIFY my $folder=$env{'form.folder'}; if ($folder eq '' || $folder eq 'supplemental') { $folder='default'; - $env{'form.folderpath'}='default&'.&Apache::lonnet::escape(&mt('Main Course Documents')); + $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents')); } my $postexec=''; if ($folder eq 'default') { @@ -2557,11 +2444,14 @@ $uploadtag $lt{'pubd'}
$uploadtag - + +
- + $help{'Importing_LON-CAPA_Resource'} +
+


$lt{'copm'}
@@ -2574,7 +2464,7 @@ $help{'Load_Map'}
- + ENDFORM unless ($env{'form.pagepath'}) { @@ -2588,7 +2478,7 @@ $uploadtag value="$lt{'extr'}" /> $help{'Adding_External_Resource'} - +
@@ -2598,7 +2488,7 @@ ENDFORM $r->print('
'); unless ($env{'form.pagepath'}) { $r->print(< +
@@ -2607,7 +2497,7 @@ onClick="javascript:makenewfolder(this.f value="$lt{'newf'}" />$help{'Adding_Folders'} -
+
@@ -2616,7 +2506,7 @@ onClick="javascript:makenewpage(this.for value="$lt{'newp'}" />$help{'Adding_Pages'}
-
+
$uploadtag @@ -2625,7 +2515,7 @@ value="Syllabus=/public/$coursedom/$cour $help{'Syllabus'}
-
+
$uploadtag @@ -2634,7 +2524,7 @@ value="Navigate Content=/adm/navmaps"> $help{'Navigate_Content'}
-
+
$uploadtag @@ -2642,7 +2532,7 @@ $uploadtag onClick="javascript:makesmppage();" /> $help{'Simple Page'}
-
+
$uploadtag @@ -2650,7 +2540,15 @@ $uploadtag onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
-
+
+$uploadtag + + + + +
+
$uploadtag @@ -2659,7 +2557,7 @@ onClick="javascript:makeexamupload();" / $help{'Score_Upload_Form'}
-
+
$uploadtag @@ -2668,7 +2566,7 @@ onClick="javascript:makebulboard();" /> $help{'Bulletin Board'}
-
+
$uploadtag @@ -2677,7 +2575,7 @@ value="$plainname=/adm/$udom/$uname/abou $help{'My Personal Info'}
-
+
$uploadtag @@ -2697,7 +2595,7 @@ $uploadtag onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
-
+
$uploadtag @@ -2724,7 +2622,7 @@ ENDBLOCK if ($folder =~ /^supplemental$/ && $env{'form.folderpath'} =~ /^default\&/) { $env{'form.folderpath'}='supplemental&'. - &Apache::lonnet::escape(&mt('Supplemental Course Documents')); + &escape(&mt('Supplemental '.$type.' Documents')); } &editor($r,$coursenum,$coursedom,$folder,$allowed); if ($allowed) { @@ -2770,7 +2668,7 @@ onClick="javascript:makenewfolder(this.f value="$lt{'newf'}" /> $help{'Adding_Folders'}
-
+
@@ -2779,7 +2677,7 @@ onClick="javascript:makenewext('supnewex value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
-
+
@@ -2788,7 +2686,7 @@ value="Syllabus=/public/$coursedom/$cour $help{'Syllabus'}
-
+
@@ -2816,9 +2714,176 @@ ENDSUPFORM } } } - $r->print(''); + $r->print(&Apache::loncommon::end_page()); return OK; } + +sub editing_js { + my ($udom,$uname) = @_; + my $now = time(); + + return <