--- loncom/interface/londocs.pm 2006/07/21 00:21:28 1.243 +++ loncom/interface/londocs.pm 2007/01/05 16:40:27 1.265 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.243 2006/07/21 00:21:28 www Exp $ +# $Id: londocs.pm,v 1.265 2007/01/05 16:40:27 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,16 +33,16 @@ use Apache::Constants qw(:common :http); use Apache::imsexport; use Apache::lonnet; use Apache::loncommon; -use Apache::lonratedt; -use Apache::lonratsrv; +use LONCAPA::map(); +use Apache::lonratedt(); use Apache::lonxml; -use Apache::loncreatecourse; +use Apache::lonclonecourse; use Apache::lonnavmaps; use HTML::Entities; use GDBM_File; use Apache::lonlocal; use Cwd; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); my $iconpath; @@ -57,7 +57,7 @@ my $hadchanges; my %help=(); -# Mapread read maps into lonratedt::global arrays +# Mapread read maps into LONCAPA::map:: global arrays # @order and @resources, determines status # sets @order - pointer to resources in right order # sets @resources - array with the resources with correct idx @@ -66,15 +66,15 @@ my %help=(); sub mapread { my ($coursenum,$coursedom,$map)=@_; return - &Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'. - $map); + &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'. + $map); } sub storemap { my ($coursenum,$coursedom,$map)=@_; my ($outtext,$errtext)= - &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'. - $map,1); + &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'. + $map,1); if ($errtext) { return ($errtext,2); } $hadchanges=1; @@ -99,7 +99,7 @@ sub authorhosts { $ca=$env{'user.name'}; $cd=$env{'user.domain'}; } else { - ($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/); + ($cd,$ca)=($realm=~/^\/($match_domain)\/($match_username)$/); } my $allowed=0; my $myhome=&Apache::lonnet::homeserver($ca,$cd); @@ -147,6 +147,7 @@ sub dumpcourse { my $type = &Apache::loncommon::course_type(); $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space'). '<form name="dumpdoc" method="post">'); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$type.' DOCS to Construction Space')); my ($home,$other,%outhash)=&authorhosts(); unless ($home) { return ''; } my $origcrsid=$env{'request.course.id'}; @@ -185,13 +186,13 @@ sub dumpcourse { $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: '); if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) { if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) { - print $fh &Apache::loncreatecourse::rewritefile( - &Apache::loncreatecourse::readfile($env{'request.course.id'},$_), + print $fh &Apache::lonclonecourse::rewritefile( + &Apache::lonclonecourse::readfile($env{'request.course.id'},$_), (%replacehash,$crs => '') ); } else { print $fh - &Apache::loncreatecourse::readfile($env{'request.course.id'},$_); + &Apache::lonclonecourse::readfile($env{'request.course.id'},$_); } $fh->close(); } else { @@ -229,7 +230,7 @@ sub dumpcourse { $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />'); &tiehash(); $r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>'); - foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) { + foreach (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { $r->print('<tr><td>'.$_.'</td>'); my ($ext)=($_=~/\.(\w+)$/); my $title=$hash{'title_'.$hash{ @@ -315,6 +316,7 @@ sub exportcourse { } } $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package')); $r->print($outcome); $r->print(&Apache::loncommon::end_page()); } else { @@ -364,7 +366,7 @@ sub exportcourse { if (ref($curRes)) { my $symb = $curRes->symb(); my $ressymb = $symb; - if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) { + if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) { unless ($ressymb =~ m|adm/wrapper/adm|) { $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; } @@ -456,6 +458,7 @@ function containerCheck(item) { |; $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package', $scripttag)); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package')); $r->print($display.'</table>'. '<p><input type="hidden" name="finishexport" value="1">'. '<input type="submit" name="exportcourse" value="'. @@ -610,7 +613,7 @@ sub build_package { if (grep/^$count$/,@$discussions) { my $ressymb = $symb; my $mode; - if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) { + if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) { unless ($ressymb =~ m|adm/wrapper/adm|) { $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; } @@ -695,7 +698,7 @@ sub process_content { } } elsif ($symb =~ m-lib/templates/examupload\.problem$-) { $content_type = 'examupload'; - } elsif ($symb =~ m-adm/(\w+)/(\w+)/(\d+)/bulletinboard$-) { + } elsif ($symb =~ m-adm/($match_domain)/($match_username)/(\d+)/bulletinboard$-) { $content_type = 'bulletinboard'; my $contents = &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2); if ($contents) { @@ -910,7 +913,7 @@ sub group_import { while (@_) { my $name = shift; my $url = shift; - if (($url =~ m#^/uploaded/$coursedom/$coursenum/(default_\d+\.)(page|sequence)$#) && ($caller eq 'londocs')) { + if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) && ($caller eq 'londocs')) { my $errtext = ''; my $fatal = 0; my $newmapstr = '<map>'."\n". @@ -930,13 +933,13 @@ sub group_import { } } if ($url) { - my $idx = &Apache::lonratedt::getresidx($url); - $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx; + my $idx = &LONCAPA::map::getresidx($url); + $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; my $ext = 'false'; - if ($url=~/^http:\/\//) { $ext = 'true'; } + if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; } $url =~ s/:/\:/g; $name =~ s/:/\:/g; - $Apache::lonratedt::resources[$idx] = + $LONCAPA::map::resources[$idx] = join ':', ($name, $url, $ext, 'normal', 'res'); } } @@ -954,6 +957,7 @@ sub breadcrumbs { } my $folderpath; my $cpinfo=''; + my $plain=''; if ($env{'form.markedcopy_url'}) { $cpinfo='&markedcopy_url='. &escape($env{'form.markedcopy_url'}). @@ -986,9 +990,201 @@ sub breadcrumbs { 'text'=>'<font size="+1">'. $name.'</font>' }); + $plain.=$name.' > '; } + $plain=~s/\>\;\s*$//; return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', - 'LC_docs_path'),$randompick,$ishidden,$isencrypted); + 'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain); +} + +sub log_docs { + return &Apache::lonnet::instructor_log('docslog',@_); +} + +{ + my @oldresources=(); + my @oldorder=(); + my $parmidx; + my %parmaction=(); + my %parmvalue=(); + my $changedflag; + + sub snapshotbefore { + @oldresources=@LONCAPA::map::resources; + @oldorder=@LONCAPA::map::order; + $parmidx=undef; + %parmaction=(); + %parmvalue=(); + $changedflag=0; + } + + sub remember_parms { + my ($idx,$parameter,$action,$value)=@_; + $parmidx=$idx; + $parmaction{$parameter}=$action; + $parmvalue{$parameter}=$value; + $changedflag=1; + } + + sub log_differences { + my ($plain)=@_; + my %storehash=('folder' => $plain, + 'currentfolder' => $env{'form.folder'}); + if ($parmidx) { + $storehash{'parameter_res'}=$oldresources[$parmidx]; + foreach my $parm (keys %parmaction) { + $storehash{'parameter_action_'.$parm}=$parmaction{$parm}; + $storehash{'parameter_value_'.$parm}=$parmvalue{$parm}; + } + } + my $maxidx=$#oldresources; + if ($#LONCAPA::map::resources>$#oldresources) { + $maxidx=$#LONCAPA::map::resources; + } + for (my $idx=0; $idx<=$maxidx; $idx++) { + if ($LONCAPA::map::resources[$idx] ne $oldresources[$idx]) { + $storehash{'before_resources_'.$idx}=$oldresources[$idx]; + $storehash{'after_resources_'.$idx}=$LONCAPA::map::resources[$idx]; + $changedflag=1; + } + if ($LONCAPA::map::order[$idx] ne $oldorder[$idx]) { + $storehash{'before_order_res_'.$idx}=$oldresources[$oldorder[$idx]]; + $storehash{'after_order_res_'.$idx}=$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; + $changedflag=1; + } + } + $storehash{'maxidx'}=$maxidx; + if ($changedflag) { &log_docs(\%storehash); } + } +} + + +# +# Docs Change Log +# +sub docs_change_log { + my ($r)=@_; + my $folder=$env{'form.folder'}; + $r->print(&Apache::loncommon::start_page('Course Document Change Log')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log')); + my %docslog=&Apache::lonnet::dump('nohist_docslog', + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}); + + if ((keys(%docslog))[0]=~/^error\:/) { undef(%docslog); } + + $r->print('<form action="/adm/coursedocs" method="post" name="docslog">'. + '<input type="hidden" name="docslog" value="1" />'); + + my %saveable_parameters = ('show' => 'scalar',); + &Apache::loncommon::store_course_settings('docs_log', + \%saveable_parameters); + &Apache::loncommon::restore_course_settings('docs_log', + \%saveable_parameters); + if (!$env{'form.show'}) { $env{'form.show'}=10; } + my %lt=('hiddenresource' => 'Resources hidden', + 'encrypturl' => 'URL hidden', + 'randompick' => 'Randomly pick', + 'set' => 'set to', + 'del' => 'deleted'); + $r->print(&Apache::loncommon::display_filter(). + '<input type="hidden" name="folder" value="'.$folder.'" />'. + '<input type="submit" value="'.&mt('Display').'" /></form>'); + $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row(). + '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Folder').'</th><th>'.&mt('Before').'</th><th>'. + &mt('After').'</th>'. + &Apache::loncommon::end_data_table_header_row()); + my $shown=0; + foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) { + if ($env{'form.displayfilter'} eq 'currentfolder') { + if ($docslog{$id}{'logentry'}{'currentfolder'} ne $folder) { next; } + } + my @changes=keys(%{$docslog{$id}{'logentry'}}); + if ($env{'form.displayfilter'} eq 'containing') { + my $wholeentry=$docslog{$id}{'exe_uname'}.':'.$docslog{$id}{'exe_udom'}.':'. + &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},$docslog{$id}{'exe_udom'}); + foreach my $key (@changes) { + $wholeentry.=':'.$docslog{$id}{'logentry'}{$key}; + } + if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } + } + my $count = 0; + my $time = + &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'}); + my $plainname = + &Apache::loncommon::plainname($docslog{$id}{'exe_uname'}, + $docslog{$id}{'exe_udom'}); + my $about_me_link = + &Apache::loncommon::aboutmewrapper($plainname, + $docslog{$id}{'exe_uname'}, + $docslog{$id}{'exe_udom'}); + my $send_msg_link=''; + if ((($docslog{$id}{'exe_uname'} ne $env{'user.name'}) + || ($docslog{$id}{'exe_udom'} ne $env{'user.domain'}))) { + $send_msg_link ='<br />'. + &Apache::loncommon::messagewrapper(&mt('Send message'), + $docslog{$id}{'exe_uname'}, + $docslog{$id}{'exe_udom'}); + } + $r->print(&Apache::loncommon::start_data_table_row()); + $r->print('<td>'.$time.'</td> + <td>'.$about_me_link. + '<br /><tt>'.$docslog{$id}{'exe_uname'}. + ':'.$docslog{$id}{'exe_udom'}.'</tt>'. + $send_msg_link.'</td><td>'. + $docslog{$id}{'logentry'}{'folder'}.'</td><td>'); +# Before + for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) { + my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0]; + my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0]; + if ($oldname ne $newname) { + $r->print(&LONCAPA::map::qtescape($oldname)); + } + } + $r->print('<ul>'); + for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) { + if ($docslog{$id}{'logentry'}{'before_order_res_'.$idx}) { + $r->print('<li>'.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'before_order_res_'.$idx}))[0]).'</li>'); + } + } + $r->print('</ul>'); +# After + $r->print('</td><td>'); + + for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) { + my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0]; + my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0]; + if ($oldname ne $newname) { + $r->print(&LONCAPA::map::qtescape($newname)); + } + } + $r->print('<ul>'); + for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) { + if ($docslog{$id}{'logentry'}{'after_order_res_'.$idx}) { + $r->print('<li>'.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'after_order_res_'.$idx}))[0]).'</li>'); + } + } + $r->print('</ul>'); + if ($docslog{$id}{'logentry'}{'parameter_res'}) { + $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>'); + foreach my $parameter ('randompick','hiddenresource','encrypturl') { + if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) { + $r->print('<li>'. + &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]', + $docslog{$id}{'logentry'}{'parameter_value_'.$parameter}) + .'</li>'); + } + } + $r->print('</ul>'); + } +# End + $r->print('</td>'.&Apache::loncommon::end_data_table_row()); + $shown++; + if (!($env{'form.show'} eq &mt('all') + || $shown<=$env{'form.show'})) { last; } + } + $r->print(&Apache::loncommon::end_data_table()); + $r->print(&Apache::loncommon::end_page()); } sub editor { @@ -1001,19 +1197,19 @@ sub editor { } ($errtext,$fatal)= &mapread($coursenum,$coursedom,$folder.'.'.$container); - if ($#Apache::lonratedt::order<1) { - my $idx=&Apache::lonratedt::getresidx(); + if ($#LONCAPA::map::order<1) { + my $idx=&LONCAPA::map::getresidx(); if ($idx<=0) { $idx=1; } - $Apache::lonratedt::order[0]=$idx; - $Apache::lonratedt::resources[$idx]=''; + $LONCAPA::map::order[0]=$idx; + $LONCAPA::map::resources[$idx]=''; } if (defined($env{'form.markcopy'})) { # Mark for copying - my ($title,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$env{'form.markcopy'}]]); + my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]); $env{'form.markedcopy_title'}=$title; $env{'form.markedcopy_url'}=$url; } - my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted)=&breadcrumbs($folder); + my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder); $r->print($breadcrumbtrail); if ($fatal) { $r->print('<p><font color="red">'.$errtext.'</font></p>'); @@ -1023,68 +1219,85 @@ sub editor { # ---------------- if they are for this folder and user allowed to make changes if (($allowed) && ($env{'form.folder'} eq $folder)) { # set parameters and change order - if (defined($env{'form.setparms'})) { + &snapshotbefore(); + if ($env{'form.changeparms'}) { my $idx=$env{'form.setparms'}; # set parameters - if ($env{'form.randpick_'.$idx}) { - &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos'); - } else { - &Apache::lonratedt::delparameter($idx,'parameter_randompick'); + if ($env{'form.changeparms'} eq 'randompick') { + if ($env{'form.randpick_'.$idx}) { + &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos'); + &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx}); + } else { + &LONCAPA::map::delparameter($idx,'parameter_randompick'); + &remember_parms($idx,'randompick','del'); + } } - if ($env{'form.hidprs_'.$idx}) { - &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno'); - } else { - &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource'); + if ($env{'form.changeparms'} eq 'hiddenresource') { + if ($env{'form.hidprs_'.$idx}) { + &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno'); + &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx}); + } else { + &LONCAPA::map::delparameter($idx,'parameter_hiddenresource'); + &remember_parms($idx,'hiddenresource','del'); + } } - if ($env{'form.encprs_'.$idx}) { - &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno'); - } else { - &Apache::lonratedt::delparameter($idx,'parameter_encrypturl'); + if ($env{'form.changeparms'} eq 'encrypturl') { + if ($env{'form.encprs_'.$idx}) { + &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno'); + &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx}); + } else { + &LONCAPA::map::delparameter($idx,'parameter_encrypturl'); + &remember_parms($idx,'encrypturl','del'); + } + } +# store the changed version + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); + if ($fatal) { + $r->print('<p><font color="red">'.$errtext.'</font></p>'); + return; } + } - if ($env{'form.newpos'}) { + if ($env{'form.newpos'}) { # change order - - my $newpos=$env{'form.newpos'}-1; - my $currentpos=$env{'form.currentpos'}-1; - my $i; - my @neworder=(); - if ($newpos>$currentpos) { + my $newpos=$env{'form.newpos'}-1; + my $currentpos=$env{'form.currentpos'}-1; + my $i; + my @neworder=(); + if ($newpos>$currentpos) { # moving stuff up - for ($i=0;$i<$currentpos;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i]; - } - for ($i=$currentpos;$i<$newpos;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i+1]; - } - $neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; - for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i]; - } - } else { + for ($i=0;$i<$currentpos;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i]; + } + for ($i=$currentpos;$i<$newpos;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i+1]; + } + $neworder[$newpos]=$LONCAPA::map::order[$currentpos]; + for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i]; + } + } else { # moving stuff down - for ($i=0;$i<$newpos;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i]; - } - $neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; - for ($i=$newpos+1;$i<$currentpos+1;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i-1]; - } - for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) { - $neworder[$i]=$Apache::lonratedt::order[$i]; - } + for ($i=0;$i<$newpos;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i]; + } + $neworder[$newpos]=$LONCAPA::map::order[$currentpos]; + for ($i=$newpos+1;$i<$currentpos+1;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i-1]; + } + for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) { + $neworder[$i]=$LONCAPA::map::order[$i]; } - @Apache::lonratedt::order=@neworder; } + @LONCAPA::map::order=@neworder; # store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); if ($fatal) { $r->print('<p><font color="red">'.$errtext.'</font></p>'); return; } - } + if ($env{'form.pastemarked'}) { # paste resource to end of list my $url=$env{'form.markedcopy_url'}; @@ -1096,8 +1309,8 @@ sub editor { $url=~/^(.+)\.(\w+)$/; my $newurl=$1.$newid.'.'.$2; my $storefn=$newurl; - $storefn=~s/^\/\w+\/\w+\/\w+\///; - &Apache::loncreatecourse::writefile + $storefn=~s{^/\w+/$match_domain/$match_username/}{}; + &Apache::lonclonecourse::writefile ($env{'request.course.id'},$storefn, &Apache::lonnet::getfile($url)); $url=$newurl; @@ -1109,10 +1322,10 @@ sub editor { if ($url=~/^http\:\/\//) { $ext='true'; } $url=~s/\:/\:/g; # Now insert the URL at the bottom - my $newidx=&Apache::lonratedt::getresidx($url); - $Apache::lonratedt::resources[$newidx]= + my $newidx=&LONCAPA::map::getresidx($url); + $LONCAPA::map::resources[$newidx]= $title.':'.$url.':'.$ext.':normal:res'; - $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx; + $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx; # Store the result ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); if ($fatal) { @@ -1125,54 +1338,48 @@ sub editor { if ($env{'form.cmd'}) { my ($cmd,$idx)=split(/\_/,$env{'form.cmd'}); if ($cmd eq 'del') { - my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]); + my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) && ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) { &Apache::lonnet::removeuploadedurl($url); } else { - &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]); + &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); } - for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) { - $Apache::lonratedt::order[$i]= - $Apache::lonratedt::order[$i+1]; + for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) { + $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; } - $#Apache::lonratedt::order--; + $#LONCAPA::map::order--; } elsif ($cmd eq 'cut') { - my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]); - &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]); - for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) { - $Apache::lonratedt::order[$i]= - $Apache::lonratedt::order[$i+1]; + my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); + &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); + for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) { + $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; } - $#Apache::lonratedt::order--; + $#LONCAPA::map::order--; } elsif ($cmd eq 'up') { - if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) { - my $i=$Apache::lonratedt::order[$idx-1]; - $Apache::lonratedt::order[$idx-1]= - $Apache::lonratedt::order[$idx]; - $Apache::lonratedt::order[$idx]=$i; + if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) { + my $i=$LONCAPA::map::order[$idx-1]; + $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx]; + $LONCAPA::map::order[$idx] = $i; } } elsif ($cmd eq 'down') { - if (defined($Apache::lonratedt::order[$idx+1])) { - my $i=$Apache::lonratedt::order[$idx+1]; - $Apache::lonratedt::order[$idx+1]= - $Apache::lonratedt::order[$idx]; - $Apache::lonratedt::order[$idx]=$i; + if (defined($LONCAPA::map::order[$idx+1])) { + my $i=$LONCAPA::map::order[$idx+1]; + $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx]; + $LONCAPA::map::order[$idx] = $i; } } elsif ($cmd eq 'rename') { - my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]; + my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; my ($rtitle,@rrest)=split(/\:/, - $Apache::lonratedt::resources[ - $Apache::lonratedt::order[$idx]]); + $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); my $comment= &HTML::Entities::decode($env{'form.title'}); $comment=~s/\</\<\;/g; $comment=~s/\>/\>\;/g; $comment=~s/\:/\:/g; if ($comment=~/\S/) { - $Apache::lonratedt::resources[ - $Apache::lonratedt::order[$idx]]= - $comment.':'.join(':',@rrest); + $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]= + $comment.':'.join(':',@rrest); } # Devalidate title cache my $renamed_url=$rrest[0]; @@ -1201,7 +1408,7 @@ sub editor { } } # Store the changed version - ($errtext,$fatal)=group_import($coursenum, $coursedom, $folder, + ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder, $container,'londocs',@imports); if ($fatal) { $r->print('<p><font color="red">'.$errtext.'</font></p>'); @@ -1213,10 +1420,9 @@ sub editor { 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; + my $idx=&LONCAPA::map::getresidx($url); + $LONCAPA::map::resources[$idx]=$_; + $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; } # Store the changed version ($errtext,$fatal)=&storemap($coursenum,$coursedom, @@ -1229,6 +1435,7 @@ sub editor { $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>'); } } + &log_differences($plain); } # ---------------------------------------------------------------- End commands # ---------------------------------------------------------------- Print screen @@ -1245,10 +1452,10 @@ sub editor { $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>'); } $r->print('<table>'); - foreach (@Apache::lonratedt::order) { - my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); - $name=&Apache::lonratsrv::qtescape($name); - $url=&Apache::lonratsrv::qtescape($url); + foreach (@LONCAPA::map::order) { + my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]); + $name=&LONCAPA::map::qtescape($name); + $url=&LONCAPA::map::qtescape($url); unless ($name) { $name=(split(/\//,$url))[-1]; } unless ($name) { $idx++; next; } $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); @@ -1306,9 +1513,9 @@ sub process_file_upload { } ($errtext,$fatal)= &mapread($coursenum,$coursedom,$folder.'.'.$container); - if ($#Apache::lonratedt::order<1) { - $Apache::lonratedt::order[0]=1; - $Apache::lonratedt::resources[1]=''; + if ($#LONCAPA::map::order<1) { + $LONCAPA::map::order[0]=1; + $LONCAPA::map::resources[1]=''; } if ($fatal) { return 'failed'; @@ -1324,7 +1531,7 @@ sub process_file_upload { } # this is for a course, not a user, so set coursedoc flag # probably the only place in the system where this should be "1" - my $newidx=&Apache::lonratedt::getresidx(); + my $newidx=&LONCAPA::map::getresidx(); $destination .= $newidx; my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination, $parseaction,$allfiles, @@ -1341,9 +1548,9 @@ sub process_file_upload { $env{'user.domain'}.'___&&&___'.$comment; } - $Apache::lonratedt::resources[$newidx]= - $comment.':'.$url.':'.$ext.':normal:res'; - $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx; + $LONCAPA::map::resources[$newidx]= + $comment.':'.$url.':'.$ext.':normal:res'; + $LONCAPA::map::order[$#LONCAPA::map::order+1]= $newidx; ($errtext,$fatal)=&storemap($coursenum,$coursedom, $folder.'.'.$container); if ($fatal) { @@ -1410,7 +1617,7 @@ sub process_secondary_uploads { $destination .= $newidx; my ($url,$filename); $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination); - ($filename) = ($url =~ m-^/uploaded/$coursedom/$coursenum/$destination/(.+)$-); + ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$}); return $filename; } @@ -1424,8 +1631,8 @@ sub entryline { my $renametitle=$title; my $foldertitle=$title; my $pagetitle=$title; - my $orderidx=$Apache::lonratedt::order[$index]; - if ($title=~ /^(\d+)___&&&___(\w+)___&&&___(\w+)___&&&___(.*)$/ ) { + my $orderidx=$LONCAPA::map::order[$index]; + if ($title=~ /^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/ ) { $foldertitle=&Apache::lontexconvert::msgtexconverted($4); $renametitle=$4; $title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '. @@ -1460,17 +1667,17 @@ sub entryline { my $incindex=$index+1; my $selectbox=''; if (($folder!~/^supplemental/) && - ($#Apache::lonratedt::order>0) && + ($#LONCAPA::map::order>0) && ((split(/\:/, - $Apache::lonratedt::resources[$Apache::lonratedt::order[0]]))[1] + $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] ne '') && ((split(/\:/, - $Apache::lonratedt::resources[$Apache::lonratedt::order[1]]))[1] + $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] ne '')) { $selectbox= '<input type="hidden" name="currentpos" value="'.$incindex.'" />'. '<select name="newpos" onChange="this.form.submit()">'; - for (my $i=1;$i<=$#Apache::lonratedt::order+1;$i++) { + for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) { if ($i==$incindex) { $selectbox.='<option value="" selected="1">('.$i.')</option>'; } else { @@ -1511,6 +1718,7 @@ ENDCOPY <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" /> <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" /> <input type="hidden" name="setparms" value="$orderidx" /> +<input type="hidden" name="changeparms" value="0" /> <td><table border='0' cellspacing='2' cellpadding='0'> <tr><td bgcolor="#DDDDDD"> <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'> @@ -1542,6 +1750,7 @@ ENDCOPY <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" /> <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" /> <input type="hidden" name="setparms" value="$orderidx" /> +<input type="hidden" name="changeparms" value="0" /> <td><table border='0' cellspacing='2' cellpadding='0'> <tr><td bgcolor="#DDDDDD"> <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'> @@ -1574,13 +1783,13 @@ END if ($uploaded) { if ($extension eq 'sequence') { $icon=$iconpath.'/folder_closed.gif'; - $url=~/$coursenum\/([\/\w]+)\.sequence$/; + $url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/; $url='/adm/coursedocs?'; $folderarg=$1; $isfolder=1; } elsif ($extension eq 'page') { $icon=$iconpath.'/page.gif'; - $url=~/$coursenum\/([\/\w]+)\.page$/; + $url=~/\Q$coursenum\E\/([\/\w]+)\.page$/; $pagearg=$1; $url='/adm/coursedocs?'; $ispage=1; @@ -1631,16 +1840,16 @@ END if ($folderpath) { $folderpath.='&' }; # Append randompick number, hidden, and encrypted with ":" to foldername, # so it gets transferred between levels - $folderpath.=$folderarg.'&'.$foldername.':'.(&Apache::lonratedt::getparameter($orderidx, + $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx, 'parameter_randompick'))[0] - .':'.((&Apache::lonratedt::getparameter($orderidx, + .':'.((&LONCAPA::map::getparameter($orderidx, 'parameter_hiddenresource'))[0]=~/^yes$/i) - .':'.((&Apache::lonratedt::getparameter($orderidx, + .':'.((&LONCAPA::map::getparameter($orderidx, 'parameter_encrypturl'))[0]=~/^yes$/i); $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, + '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'. + (&LONCAPA::map::getparameter($orderidx, 'parameter_randompick'))[0]. '" />'. '<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>'; @@ -1673,14 +1882,14 @@ END 'hd' => 'Hidden', 'ec' => 'URL hidden'); my $enctext= - ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':''); + ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':''); my $hidtext= - ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); + ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); $line.=(<<ENDPARMS); <td bgcolor="#BBBBFF"><font size='-2'> -<nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td> +<nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td> <td bgcolor="#BBBBFF"><font size='-2'> -<nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td> +<nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td> <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td> ENDPARMS } @@ -1794,6 +2003,7 @@ sub list_symbs { my ($r) = @_; $r->print(&Apache::loncommon::start_page('Symb List')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List')); my $navmap = Apache::lonnavmaps::navmap->new(); $r->print("<pre>\n"); foreach my $res ($navmap->retrieveResources()) { @@ -1813,6 +2023,7 @@ sub verifycontent { my $loaderror=&Apache::lonnet::overloaderror($r); if ($loaderror) { return $loaderror; } $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents')); $hashtied=0; undef %alreadyseen; %alreadyseen=(); @@ -1848,6 +2059,7 @@ sub checkversions { my ($r) = @_; my $type = &Apache::loncommon::course_type(); $r->print(&Apache::loncommon::start_page("Check $type Document Versions")); + $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions")); my $header=''; my $startsel=''; my $monthsel=''; @@ -2139,6 +2351,22 @@ sub changewarning { $help{'Caching'}.'</font></h3></form>'."\n\n"); } +# =========================================== Breadcrumbs for special functions + +sub init_breadcrumbs { + my ($form,$text)=@_; + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs", + text=>&Apache::loncommon::course_type()." Documents", + faq=>273, + bug=>'Instructor Interface', + help => 'Docs_Adding_Course_Doc'}); + &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs?".$form.'=1', + text=>$text, + faq=>273, + bug=>'Instructor Interface'}); +} + # ================================================================ Main Handler sub handler { my $r = shift; @@ -2167,20 +2395,28 @@ sub handler { 'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages'); $help{'My Personal Info'} = &Apache::loncommon::help_open_topic( 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); + $help{'Group Files'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); # does this user have privileges to modify docs my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); - if ($allowed && $env{'form.verify'}) { + &init_breadcrumbs('verify','Verify Content'); &verifycontent($r); } elsif ($allowed && $env{'form.listsymbs'}) { + &init_breadcrumbs('listsymbs','List Symbs'); &list_symbs($r); + } elsif ($allowed && $env{'form.docslog'}) { + &init_breadcrumbs('docslog','Show Log'); + &docs_change_log($r); } elsif ($allowed && $env{'form.versions'}) { + &init_breadcrumbs('versions','Check/Set Resource Versions'); &checkversions($r); } elsif ($allowed && $env{'form.dumpcourse'}) { + &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space'); &dumpcourse($r); } elsif ($allowed && $env{'form.exportcourse'}) { + &init_breadcrumbs('exportcourse','Export '.&Apache::loncommon::course_type().' to IMS'); &exportcourse($r); } else { # is this a standard course? @@ -2235,8 +2471,7 @@ sub handler { # get personal data my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; - my $plainname=&escape( - &Apache::loncommon::plainname($uname,$udom)); + my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom)); # graphics settings @@ -2255,7 +2490,8 @@ sub handler { my %codebase = (); my ($upload_result,$upload_output); if ($allowed) { - if (($env{'form.uploaddoc.filename'}) && ($env{'form.cmd'}=~/^upload_(\w+)/)) { + if (($env{'form.uploaddoc.filename'}) && + ($env{'form.cmd'}=~/^upload_(\w+)/)) { # Process file upload - phase one - upload and parse primary file. $upload_result = &process_file_upload(\$upload_output,$coursenum, $coursedom,\%allfiles, @@ -2360,6 +2596,7 @@ sub handler { 'scuf' => 'Score Upload Form', 'bull' => 'Bulletin Board', 'mypi' => 'My Personal Info', + 'grpo' => 'Group Files', 'abou' => 'About User', 'imsf' => 'Import IMS package', 'file' => 'File', @@ -2375,6 +2612,7 @@ sub handler { 'vc' => 'Verify Content', 'cv' => 'Check/Set Resource Versions', 'ls' => 'List Symbs', + 'sl' => 'Show Log' ); my $folderpath=$env{'form.folderpath'}; @@ -2398,7 +2636,7 @@ sub handler { $containertag </form> <form name="simpleedit" method="post" action="/adm/coursedocs"> -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> $uploadtag </form> <form action="/adm/coursedocs" method="post" name="courseverify"> @@ -2411,6 +2649,9 @@ $dumpbut $exportbut </td><td bgcolor="#DDDDCC"> <input type="submit" name="listsymbs" value="$lt{'ls'}" /> +</td><td bgcolor="#DDDDCC"> + <input type="hidden" name="folder" value="$env{'form.folder'}" /> + <input type="submit" name="docslog" value="$lt{'sl'}" /> </td></tr></table> </form> ENDCOURSEVERIFY @@ -2510,7 +2751,7 @@ ENDFORM <hr /> <form action="/adm/coursedocs" method="post" name="newext"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newext" type="button" onClick="javascript:makenewext('newext');" value="$lt{'extr'}" /> $help{'Adding_External_Resource'} @@ -2528,7 +2769,7 @@ ENDFORM $r->print(<<ENDFORM); <br /><form action="/adm/coursedocs" method="post" name="newfolder"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newfolder" type="button" onClick="javascript:makenewfolder(this.form,'$folderseq');" @@ -2537,7 +2778,7 @@ value="$lt{'newf'}" />$help{'Adding_Fold </form> <br /><form action="/adm/coursedocs" method="post" name="newpage"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newpage" type="button" onClick="javascript:makenewpage(this.form,'$pageseq');" @@ -2546,8 +2787,8 @@ value="$lt{'newp'}" />$help{'Adding_Page </form> <br /><form action="/adm/coursedocs" method="post" name="newsyl"> $uploadtag -<input type=hidden name="importdetail" -value="Syllabus=/public/$coursedom/$coursenum/syllabus"> +<input type="hidden" name="importdetail" +value="Syllabus=/public/$coursedom/$coursenum/syllabus" /> <nobr> <input name="newsyl" type="submit" value="$lt{'syll'}" /> $help{'Syllabus'} @@ -2555,8 +2796,8 @@ value="Syllabus=/public/$coursedom/$cour </form> <br /><form action="/adm/coursedocs" method="post" name="newnav"> $uploadtag -<input type=hidden name="importdetail" -value="Navigate Content=/adm/navmaps"> +<input type="hidden" name="importdetail" +value="Navigate Content=/adm/navmaps" /> <nobr> <input name="newnav" type="submit" value="$lt{'navc'}" /> $help{'Navigate_Content'} @@ -2564,7 +2805,7 @@ $help{'Navigate_Content'} </form> <br /><form action="/adm/coursedocs" method="post" name="newsmppg"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newsmppg" type="button" value="$lt{'sipa'}" onClick="javascript:makesmppage();" /> $help{'Simple Page'} @@ -2572,7 +2813,7 @@ onClick="javascript:makesmppage();" /> $ </form> <br /><form action="/adm/coursedocs" method="post" name="newsmpproblem"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newsmpproblem" type="button" value="$lt{'sipr'}" onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} @@ -2580,7 +2821,7 @@ onClick="javascript:makesmpproblem();" / </form> <br /><form action="/adm/coursedocs" method="post" name="newdropbox"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newdropbox" type="button" value="$lt{'drbx'}" onClick="javascript:makedropbox();" /> @@ -2588,7 +2829,7 @@ onClick="javascript:makedropbox();" /> </form> <br /><form action="/adm/coursedocs" method="post" name="newexamupload"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newexamupload" type="button" value="$lt{'scuf'}" onClick="javascript:makeexamupload();" /> @@ -2597,7 +2838,7 @@ $help{'Score_Upload_Form'} </form> <br /><form action="/adm/coursedocs" method="post" name="newbul"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newbulletin" type="button" value="$lt{'bull'}" onClick="javascript:makebulboard();" /> @@ -2606,8 +2847,8 @@ $help{'Bulletin Board'} </form> <br /><form action="/adm/coursedocs" method="post" name="newaboutme"> $uploadtag -<input type=hidden name="importdetail" -value="$plainname=/adm/$udom/$uname/aboutme"> +<input type="hidden" name="importdetail" +value="$plainname=/adm/$udom/$uname/aboutme" /> <nobr> <input name="newaboutme" type="submit" value="$lt{'mypi'}" /> $help{'My Personal Info'} @@ -2615,19 +2856,28 @@ $help{'My Personal Info'} </form> <br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newaboutsomeone" type="button" value="$lt{'abou'}" onClick="javascript:makeabout();" /> </nobr> </form> +<br /><form action="/adm/coursedocs" method="post" name="newgroupfiles"> +$uploadtag +<input type="hidden" name="importdetail" +value="Group Files=/adm/$coursedom/$coursenum/aboutme" /> +<nobr> +<input name="newgroupfiles" type="submit" value="$lt{'grpo'}" /> +$help{'Group Files'} +</nobr> +</form> ENDFORM } if ($env{'form.pagepath'}) { $r->print(<<ENDBLOCK); <form action="/adm/coursedocs" method="post" name="newsmpproblem"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newsmpproblem" type="button" value="$lt{'sipr'}" onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} @@ -2635,7 +2885,7 @@ onClick="javascript:makesmpproblem();" / </form> <br /><form action="/adm/coursedocs" method="post" name="newexamupload"> $uploadtag -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newexamupload" type="button" value="$lt{'scuf'}" onClick="javascript:makeexamupload();" /> @@ -2699,7 +2949,7 @@ $lt{'comment'}:<br /> <td bgcolor="#DDDDDD"> <form action="/adm/coursedocs" method="post" name="supnewfolder"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newfolder" type="button" onClick="javascript:makenewfolder(this.form,'$folderseq');" @@ -2708,7 +2958,7 @@ value="$lt{'newf'}" /> $help{'Adding_Fol </form> <br /><form action="/adm/coursedocs" method="post" name="supnewext"> <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> -<input type=hidden name="importdetail" value=""> +<input type="hidden" name="importdetail" value="" /> <nobr> <input name="newext" type="button" onClick="javascript:makenewext('supnewext');" @@ -2717,8 +2967,8 @@ value="$lt{'extr'}" /> $help{'Adding_Ext </form> <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"> +<input type="hidden" name="importdetail" +value="Syllabus=/public/$coursedom/$coursenum/syllabus" /> <nobr> <input name="newsyl" type="submit" value="$lt{'syll'}" /> $help{'Syllabus'} @@ -2726,8 +2976,8 @@ $help{'Syllabus'} </form> <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"> +<input type="hidden" name="importdetail" +value="$plainname=/adm/$udom/$uname/aboutme" /> <nobr> <input name="newaboutme" type="submit" value="$lt{'mypi'}" /> $help{'My Personal Info'}