--- loncom/interface/londocs.pm 2005/07/26 16:41:43 1.198 +++ loncom/interface/londocs.pm 2006/06/08 16:00:54 1.231 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.198 2005/07/26 16:41:43 raeburn Exp $ +# $Id: londocs.pm,v 1.231 2006/06/08 16:00:54 www 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='</td><td bgcolor="#DDDDCC">'; if ($home) { return '</td><td bgcolor="#DDDDCC">'. '<input type="submit" name="dumpcourse" value="'. - &mt('Dump Course DOCS to Construction Space').'" />'. + &mt('Dump '.$type.' DOCS to Construction Space').'" />'. &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs'); } else { return'</td><td bgcolor="#DDDDCC">'. - &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.'<head><title>Dump DOCS</title></head>'. - &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'). '<form name="dumpdoc" method="post">'); my ($home,$other,%outhash)=&authorhosts(); unless ($home) { return ''; } @@ -166,7 +169,10 @@ sub dumpcourse { $crs=~s/\_/\//g; foreach (keys %replacehash) { my $newfilename=$title.'/'.$replacehash{$_}; + $newfilename=~s/\.(\w+)$//; + my $ext=$1; $newfilename=&clean($newfilename); + $newfilename.='.'.$ext; my @dirs=split(/\//,$newfilename); my $path='/home/'.$ca.'/public_html'; my $makepath=$path; @@ -219,7 +225,7 @@ sub dumpcourse { $r->print('</select>'); } my $title=$origcrsdata{'description'}; - $title=~s/\s+/\_/gs; + $title=~s/[\/\s]+/\_/gs; $title=&clean($title); $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />'); &tiehash(); @@ -242,21 +248,23 @@ sub dumpcourse { $r->print("</table>\n"); &untiehash(); $r->print( - '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump Course DOCS').'" /></p></form>'); + '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump [_1] DOCS',$type).'" /></p></form>'); } } # ------------------------------------------------------ Generate "export" button sub exportbutton { + my $type = &Apache::loncommon::course_type(); return '</td><td bgcolor="#DDDDCC">'. '<input type="submit" name="exportcourse" value="'. - &mt('Export Course to IMS').'" />'. - &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs'); + &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; @@ -297,7 +305,7 @@ sub exportcourse { open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); close(OUTPUT); chdir $cwd; - $outcome .= 'Download the zip file from <a href="'.$imszipfile.'">IMS course archive</a><br />'; + $outcome .= &mt('Download the zip file from <a href="[_1]">IMS '.lc($type).' archive</a><br />',$imszipfile,); if ($copyresult) { $outcome .= 'The following errors occurred during export - '.$copyresult; } @@ -305,15 +313,13 @@ sub exportcourse { $outcome = '<br />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.<br />'; } } - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'<head><title>Export Course</title></head>'. - &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('</body></html>'); + $r->print(&Apache::loncommon::end_page()); } else { my $display; $display = '<form name="exportdoc" method="post">'."\n"; - $display .= 'Choose which items you wish to export from your course.<br /><br />'; + $display .= &mt('Choose which items you wish to export from your '.$type.'.<br /><br />'); $display .= '<table border="0" cellspacing="0" cellpadding="3">'. '<tr><td><fieldset><legend> <b>Content items</b></legend>'. '<input type="button" value="check all" '. @@ -447,15 +453,13 @@ function containerCheck(item) { </script> |; - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'<head><title>Export Course</title>'.$scripttag.'</head>'. - &Apache::loncommon::bodytag('Export course to IMS content package' -)); - - $r->print($display.'</table>'. + $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package', + $scripttag)); + $r->print($display.'</table>'. '<p><input type="hidden" name="finishexport" value="1">'. '<input type="submit" name="exportcourse" value="'. - &mt('Export Course DOCS').'" /></p></form></body></html>'); + &mt('Export '.$type.' DOCS').'" /></p></form>'. + &Apache::loncommon::end_page()); } } @@ -490,10 +494,21 @@ sub create_ims_store { ' identifier="MANIFEST-'.$env{'request.course.id'}.'-'.$now.'"'. ' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. ' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". +' <metadata> + <schema></schema> + <imsmd:lom> + <imsmd:general> + <imsmd:identifier>'.$env{'request.course.id'}.'</imsmd:identifier> + <imsmd:title> + <imsmd:langstring xml:lang="en">'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</imsmd:langstring> + </imsmd:title> + </imsmd:general> + </imsmd:lom> + </metadata>'."\n". ' <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n". ' <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'. ' structure="hierarchical">'."\n". -' <title>'.$env{'request.'.$env{'request.course.id'}.'.description'}.'</title>' +' <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>' } else { $$outcome .= 'An error occurred opening the IMS manifest file.<br />' ; @@ -541,7 +556,6 @@ sub build_package { $count = 0; my $imsresources; my $pkgdepth; - my $included = 0; while ($curRes = $it->next()) { if ($curRes == $it->BEGIN_MAP()) { $prevdepth = $depth; @@ -564,10 +578,13 @@ sub build_package { unless ($curRes->is_sequence()) { $resourceref = 'identifierref="RES-'.$env{'request.course.id'}.'-'.$count.'"'; } - if (($depth <= $prevdepth) && ($count > 1) && ($included)) { - print $ims_manifest "\n".' </item>'."\n"; + my $step = $prevdepth - $depth; + if (($step >= 0) && ($count > 1)) { + while ($step >= 0) { + print $ims_manifest "\n".' </item>'."\n"; + $step --; + } } - $included = 1; $prevdepth = $depth; my $itementry = @@ -609,8 +626,6 @@ sub build_package { } } $pkgdepth = $depth; - } else { - $included = 0; } } } @@ -645,7 +660,6 @@ sub process_content { my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_; my $content_type; my $message; -# find where user is author or co-author my @uploads = (); if ($curRes->is_sequence()) { $content_type = 'sequence'; @@ -699,6 +713,7 @@ sub process_content { if ($2 eq $env{'user.domain'} && $3 eq $env{'user.name'}) { $canedit= 1; } +# only include problem code where current user is author if ($canedit) { $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource'); } else { @@ -939,11 +954,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); @@ -951,18 +965,17 @@ 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'=>'<font size="+1">'. - &Apache::lonnet::unescape($foldername).'</font>' + &unescape($foldername).'</font>' }); } - return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef, - 0,'nohelp'); + return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp'); } sub editor { @@ -1100,7 +1113,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]); @@ -1162,8 +1175,8 @@ sub editor { 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; } } @@ -1176,22 +1189,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('<p><font color="red">'.$errtext.'</font></p>'); - return; - } + if ($fatal) { + $r->print('<p><font color="red">'.$errtext.'</font></p>'); + return; + } + } else { + $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>'); + } } } # ---------------------------------------------------------------- End commands @@ -1201,6 +1217,8 @@ sub editor { $r->print('<table>'); 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)); @@ -1311,14 +1329,14 @@ sub process_file_upload { method="post" enctype="multipart/form-data"> <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" /> <input type="hidden" name="cmd" value="upload_embedded" /> <input type="hidden" name="newidx" value="'.$newidx.'" /> - <input type="hidden" name="primaryurl" value="'.&Apache::lonnet::escape($url).'" /> + <input type="hidden" name="primaryurl" value="'.&escape($url).'" /> <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />'; $$upload_output .= '<b>Upload embedded files</b>:<br /> <table>'; foreach my $embed_file (keys(%{$allfiles})) { $$upload_output .= '<tr><td>'.$embed_file. '<input name="embedded_item_'.$num.'" type="file" /> - <input name="embedded_orig_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($embed_file).'" />'; + <input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />'; my $attrib; if (@{$$allfiles{$embed_file}} > 1) { $attrib = join(':',@{$$allfiles{$embed_file}}); @@ -1329,7 +1347,7 @@ sub process_file_upload { '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />'; if (exists($$codebase{$embed_file})) { $$upload_output .= - '<input name="codebase_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($$codebase{$embed_file}).'" />'; + '<input name="codebase_'.$num.'" type="hidden" value="'.&escape($$codebase{$embed_file}).'" />'; } $$upload_output .= '</td></tr>'; $num ++; @@ -1357,7 +1375,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); @@ -1372,7 +1390,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; @@ -1384,6 +1402,7 @@ sub entryline { &Apache::loncommon::plainname($2,$3).': <br />'. $foldertitle; } + $renametitle=~s/\\/\\\\/g; $renametitle=~s/\"\;/\\\"/g; my $line='<tr>'; # Edit commands @@ -1391,21 +1410,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; @@ -1437,7 +1456,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=(<<ENDCOPY); +<a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'> +<font size="-2" color="#000099">$lt{'cp'}</font></a></td> +ENDCOPY + } $line.=(<<END); <form name="entry_$index" action="/adm/coursedocs" method="post"> <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" /> @@ -1461,10 +1497,15 @@ sub entryline { <font size="-2" color="#550044">$lt{'ct'}</font></a> <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'> <font size="-2" color="#009900">$lt{'rn'}</font></a> -<a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'> -<font size="-2" color="#000099">$lt{'cp'}</font></a></td> +$copylink END } else { + unless ($nocopy) { + $copylink=(<<ENDCOPY); +<a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'> +<font size="-2" color="#000099">$lt{'cp'}</font></a></td> +ENDCOPY + } $line.=(<<END); <form name="entry_$index" action="/adm/coursedocs" method="post"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> @@ -1487,8 +1528,7 @@ END <font size="-2" color="#550044">$lt{'ct'}</font></a> <a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'> <font size="-2" color="#009900">$lt{'rn'}</font></a> -<a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'> -<font size="-2" color="#000099">$lt{'cp'}</font></a></td> +$copylink END } } @@ -1518,7 +1558,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/'. @@ -1542,21 +1582,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='<label>'.&mt('Randomly Pick: '). '<input type="text" size="4" onChange="this.form.submit()" name="randpick_'.$orderidx.'" value="'. (&Apache::lonratedt::getparameter($orderidx, @@ -1566,7 +1606,7 @@ END } if ($ispage) { - my $pagename=&Apache::lonnet::escape($pagetitle); + my $pagename=&escape($pagetitle); my $pagepath; my $folderpath=$env{'form.folderpath'}; if ($folderpath) { $pagepath = $folderpath.'&' }; @@ -1580,12 +1620,12 @@ END $residx, $path.$pagearg.'.page'); } - $url.='pagepath='.&Apache::lonnet::escape($pagepath). - '&pagesymb='.&Apache::lonnet::escape($symb).$cpinfo; + $url.='pagepath='.&escape($pagepath). + '&pagesymb='.&escape($symb).$cpinfo; } $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon. '" border="0"></a></td>'. - "<td bgcolor='#FFFFBB'><a href='$url'>$title</a></td>"; + "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>"; if (($allowed) && ($folder!~/^supplemental/)) { my %lt=&Apache::lonlocal::texthash( 'hd' => 'Hidden', @@ -1629,13 +1669,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!~/\*$/)) { @@ -1705,29 +1746,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("<pre>\n"); + foreach my $res ($navmap->retrieveResources()) { + $r->print($res->compTitle()."\t".$res->symb()."\n"); + } + $r->print("\n</pre>\n"); + $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>'); +} + + +# # -------------------------------------------------------------- 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.'<head><title>Verify Content</title></head>'. - &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('<hr /><font color="red">'. - &mt('The following sequence or page is included more than once in your course: '). - &Apache::lonnet::unescape($hash{$_}).'</font><br />'. + &mt('The following sequence or page is included more than once in your '.$type.': '). + &unescape($hash{$_}).'</font><br />'. &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />')); } } - if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&Apache::lonnet::unescape($hash{$_})})) { + if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$_})})) { &checkonthis($r,$hash{$_},0,$hash{'title_'.$1}); } } @@ -1746,10 +1803,9 @@ sub devalidateversioncache { } sub checkversions { - my $r=shift; - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'<head><title>Check Versions</title></head>'. - &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=''; @@ -1810,7 +1866,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\/.+)$/) { @@ -1855,7 +1911,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', @@ -1864,9 +1920,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'); @@ -1913,7 +1969,7 @@ ENDHEADERS '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '. '<font size="+1">'.$currentversion.'</font>'. '</nobr></td>'. - '<td title="'.$lt{'ve'}.'"><nobr>In Course: '. + '<td title="'.$lt{'ve'}.'"><nobr>In '.$type.': '. '<font size="+1">'); # Used in course my $usedversion=$hash{'version_'.$linkurl}; @@ -2017,15 +2073,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.'; } @@ -2036,7 +2093,7 @@ sub changewarning { '" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'. &mt($message,' <input type="hidden" name="'. $env{'request.role'}.'" value="1" /><input type="button" value="'. - &mt('re-initializing course').'" onClick="reinit(this.form)" />'). + &mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />'). $help{'Caching'}.'</font></h3></form>'."\n\n"); } @@ -2046,16 +2103,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'); @@ -2069,13 +2127,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? @@ -2084,21 +2147,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 = '<input type="hidden" name="pagepath" value="" />'. '<input type="hidden" name="pagesymb" value="" />'; @@ -2110,213 +2173,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='</script>'.&Apache::lonmenu::registerurl(1,undef).'<script>'; - $events='onLoad="'.&Apache::lonmenu::loadevents. - '" onUnload="'.&Apache::lonmenu::unloadevents.'"'; } # get course data my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'}; my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'}; -# get personal data - +# get personal data my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; - my $plainname=&Apache::lonnet::escape( + my $plainname=&escape( &Apache::loncommon::plainname($uname,$udom)); # graphics settings $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/"); - my $now=time; - -# print screen - my $html=&Apache::lonxml::xmlbegin(); - $r->print(<<ENDDOCUMENT); -$html -<head> -<title>The LearningOnline Network with CAPA</title> -<script> -$script -</script> -ENDDOCUMENT - if ($allowed) { - $r->print(<<ENDNEWSCRIPT); -<script> -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(); -} - -</script> - -ENDNEWSCRIPT - } # -------------------------------------------------------------------- Body tag - $r->print('</head>'. - &Apache::loncommon::bodytag('Course Documents','',$events, - '','',$showdoc). - &Apache::loncommon::help_open_menu('','','','',273,'RAT')); + $script = '<script type="text/javascript">'."\n".$script."\n".'</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); @@ -2335,15 +2227,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 = (); @@ -2353,7 +2245,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; @@ -2384,7 +2276,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. @@ -2402,8 +2294,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', @@ -2421,6 +2313,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', @@ -2438,6 +2331,7 @@ ENDNEWSCRIPT my %lt=&Apache::lonlocal::texthash( 'vc' => 'Verify Content', 'cv' => 'Check/Set Resource Versions', + 'ls' => 'List Symbs', ); my $folderpath=$env{'form.folderpath'}; @@ -2445,7 +2339,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'}) { @@ -2472,11 +2366,13 @@ $uploadtag <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'} $dumpbut $exportbut +</td><td bgcolor="#DDDDCC"> + <input type="submit" name="listsymbs" value="$lt{'ls'}" /> </td></tr></table> </form> 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('<table border=2 cellspacing=4 cellpadding=4>'); @@ -2487,7 +2383,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') { @@ -2574,7 +2470,7 @@ $uploadtag value="$lt{'extr'}" /> $help{'Adding_External_Resource'} </nobr> </form> -<form action="/adm/imsimportdocs" method="post" name="ims"> +<br /><form action="/adm/imsimportdocs" method="post" name="ims"> <input type="hidden" name="folder" value="$folder" /> <input name="imsimport" type="button" value="$lt{'imsf'}" onClick="javascript:makeims();" /> </nobr> @@ -2584,7 +2480,7 @@ ENDFORM $r->print('</td><td bgcolor="#DDDDDD">'); unless ($env{'form.pagepath'}) { $r->print(<<ENDFORM); -<form action="/adm/coursedocs" method="post" name="newfolder"> +<br /><form action="/adm/coursedocs" method="post" name="newfolder"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> <input type=hidden name="importdetail" value=""> <nobr> @@ -2593,7 +2489,7 @@ onClick="javascript:makenewfolder(this.f value="$lt{'newf'}" />$help{'Adding_Folders'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newpage"> +<br /><form action="/adm/coursedocs" method="post" name="newpage"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> <input type=hidden name="importdetail" value=""> <nobr> @@ -2602,7 +2498,7 @@ onClick="javascript:makenewpage(this.for value="$lt{'newp'}" />$help{'Adding_Pages'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newsyl"> +<br /><form action="/adm/coursedocs" method="post" name="newsyl"> $uploadtag <input type=hidden name="importdetail" value="Syllabus=/public/$coursedom/$coursenum/syllabus"> @@ -2611,7 +2507,7 @@ value="Syllabus=/public/$coursedom/$cour $help{'Syllabus'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newnav"> +<br /><form action="/adm/coursedocs" method="post" name="newnav"> $uploadtag <input type=hidden name="importdetail" value="Navigate Content=/adm/navmaps"> @@ -2620,7 +2516,7 @@ value="Navigate Content=/adm/navmaps"> $help{'Navigate_Content'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newsmppg"> +<br /><form action="/adm/coursedocs" method="post" name="newsmppg"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2628,7 +2524,7 @@ $uploadtag onClick="javascript:makesmppage();" /> $help{'Simple Page'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newsmpproblem"> +<br /><form action="/adm/coursedocs" method="post" name="newsmpproblem"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2636,7 +2532,15 @@ $uploadtag onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newexamupload"> +<br /><form action="/adm/coursedocs" method="post" name="newdropbox"> +$uploadtag +<input type=hidden name="importdetail" value=""> +<nobr> +<input name="newdropbox" type="button" value="$lt{'drbx'}" +onClick="javascript:makedropbox();" /> +</nobr> +</form> +<br /><form action="/adm/coursedocs" method="post" name="newexamupload"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2645,7 +2549,7 @@ onClick="javascript:makeexamupload();" / $help{'Score_Upload_Form'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newbul"> +<br /><form action="/adm/coursedocs" method="post" name="newbul"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2654,7 +2558,7 @@ onClick="javascript:makebulboard();" /> $help{'Bulletin Board'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newaboutme"> +<br /><form action="/adm/coursedocs" method="post" name="newaboutme"> $uploadtag <input type=hidden name="importdetail" value="$plainname=/adm/$udom/$uname/aboutme"> @@ -2663,7 +2567,7 @@ value="$plainname=/adm/$udom/$uname/abou $help{'My Personal Info'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newaboutsomeone"> +<br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2683,7 +2587,7 @@ $uploadtag onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="newexamupload"> +<br /><form action="/adm/coursedocs" method="post" name="newexamupload"> $uploadtag <input type=hidden name="importdetail" value=""> <nobr> @@ -2710,7 +2614,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) { @@ -2756,7 +2660,7 @@ onClick="javascript:makenewfolder(this.f value="$lt{'newf'}" /> $help{'Adding_Folders'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="supnewext"> +<br /><form action="/adm/coursedocs" method="post" name="supnewext"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> <input type=hidden name="importdetail" value=""> <nobr> @@ -2765,7 +2669,7 @@ onClick="javascript:makenewext('supnewex value="$lt{'extr'}" /> $help{'Adding_External_Resource'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="supnewsyl"> +<br /><form action="/adm/coursedocs" method="post" name="supnewsyl"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> <input type=hidden name="importdetail" value="Syllabus=/public/$coursedom/$coursenum/syllabus"> @@ -2774,7 +2678,7 @@ value="Syllabus=/public/$coursedom/$cour $help{'Syllabus'} </nobr> </form> -<form action="/adm/coursedocs" method="post" name="subnewaboutme"> +<br /><form action="/adm/coursedocs" method="post" name="subnewaboutme"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> <input type=hidden name="importdetail" value="$plainname=/adm/$udom/$uname/aboutme"> @@ -2802,9 +2706,176 @@ ENDSUPFORM } } } - $r->print('</body></html>'); + $r->print(&Apache::loncommon::end_page()); return OK; } + +sub editing_js { + my ($udom,$uname) = @_; + my $now = time(); + + return <<ENDNEWSCRIPT; +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 makedropbox() { + var title=prompt('Listed Title for the Drop Box'); + if (title) { + this.document.forms.newdropbox.importdetail.value= + title+'=/res/lib/templates/DropBox.problem'; + this.document.forms.newdropbox.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; + } + this.document.forms.renameform.submit(); +} + +ENDNEWSCRIPT +} 1; __END__