version 1.159, 2004/12/23 16:31:27
|
version 1.277, 2007/06/15 19:12:56
|
Line 33 use Apache::Constants qw(:common :http);
|
Line 33 use Apache::Constants qw(:common :http);
|
use Apache::imsexport; |
use Apache::imsexport; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonratedt; |
use LONCAPA::map(); |
use Apache::lonratsrv; |
use Apache::lonratedt(); |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::loncreatecourse; |
use Apache::lonclonecourse; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use HTML::Entities; |
use HTML::Entities; |
use GDBM_File; |
use GDBM_File; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Cwd; |
use Cwd; |
|
use LONCAPA qw(:DEFAULT :match); |
|
|
my $iconpath; |
my $iconpath; |
|
|
Line 56 my $hadchanges;
|
Line 57 my $hadchanges;
|
|
|
my %help=(); |
my %help=(); |
|
|
# Mapread read maps into lonratedt::global arrays |
# Mapread read maps into LONCAPA::map:: global arrays |
# @order and @resources, determines status |
# @order and @resources, determines status |
# sets @order - pointer to resources in right order |
# sets @order - pointer to resources in right order |
# sets @resources - array with the resources with correct idx |
# sets @resources - array with the resources with correct idx |
Line 65 my %help=();
|
Line 66 my %help=();
|
sub mapread { |
sub mapread { |
my ($coursenum,$coursedom,$map)=@_; |
my ($coursenum,$coursedom,$map)=@_; |
return |
return |
&Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'. |
&LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'. |
$map); |
$map); |
} |
} |
|
|
sub storemap { |
sub storemap { |
my ($coursenum,$coursedom,$map)=@_; |
my ($coursenum,$coursedom,$map)=@_; |
my ($outtext,$errtext)= |
my ($outtext,$errtext)= |
&Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'. |
&LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'. |
$map,1); |
$map,1); |
if ($errtext) { return ($errtext,2); } |
if ($errtext) { return ($errtext,2); } |
|
|
$hadchanges=1; |
$hadchanges=1; |
Line 86 sub authorhosts {
|
Line 87 sub authorhosts {
|
my %outhash=(); |
my %outhash=(); |
my $home=0; |
my $home=0; |
my $other=0; |
my $other=0; |
foreach (keys %ENV) { |
foreach (keys %env) { |
if ($_=~/^user\.role\.(au|ca)\.(.+)$/) { |
if ($_=~/^user\.role\.(au|ca)\.(.+)$/) { |
my $role=$1; |
my $role=$1; |
my $realm=$2; |
my $realm=$2; |
my ($start,$end)=split(/\./,$ENV{$_}); |
my ($start,$end)=split(/\./,$env{$_}); |
if (($start) && ($start>time)) { next; } |
if (($start) && ($start>time)) { next; } |
if (($end) && (time>$end)) { next; } |
if (($end) && (time>$end)) { next; } |
my $ca; my $cd; |
my $ca; my $cd; |
if ($1 eq 'au') { |
if ($1 eq 'au') { |
$ca=$ENV{'user.name'}; |
$ca=$env{'user.name'}; |
$cd=$ENV{'user.domain'}; |
$cd=$env{'user.domain'}; |
} else { |
} else { |
($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/); |
($cd,$ca)=($realm=~/^\/($match_domain)\/($match_username)$/); |
} |
} |
my $allowed=0; |
my $allowed=0; |
my $myhome=&Apache::lonnet::homeserver($ca,$cd); |
my $myhome=&Apache::lonnet::homeserver($ca,$cd); |
Line 119 sub authorhosts {
|
Line 120 sub authorhosts {
|
|
|
sub dumpbutton { |
sub dumpbutton { |
my ($home,$other,%outhash)=&authorhosts(); |
my ($home,$other,%outhash)=&authorhosts(); |
|
my $type = &Apache::loncommon::course_type(); |
if ($home+$other==0) { return ''; } |
if ($home+$other==0) { return ''; } |
my $output='</td><td bgcolor="#DDDDCC">'; |
my $output='</td><td bgcolor="#DDDDCC">'; |
if ($home) { |
if ($home) { |
return '</td><td bgcolor="#DDDDCC">'. |
return '</td><td bgcolor="#DDDDCC">'. |
'<input type="submit" name="dumpcourse" value="'. |
'<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'); |
&Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs'); |
} else { |
} else { |
return'</td><td bgcolor="#DDDDCC">'. |
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'); |
} |
} |
} |
} |
|
|
|
sub clean { |
|
my ($title)=@_; |
|
$title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; |
|
return $title; |
|
} |
# -------------------------------------------------------- Actually dump course |
# -------------------------------------------------------- Actually dump course |
|
|
sub dumpcourse { |
sub dumpcourse { |
my $r=shift; |
my ($r) = @_; |
$r->print('<html><head><title>Dump DOCS</title></head>'. |
my $type = &Apache::loncommon::course_type(); |
&Apache::loncommon::bodytag('Dump Course DOCS to Construction Space'). |
$r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space'). |
'<form name="dumpdoc" method="post">'); |
'<form name="dumpdoc" method="post">'); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$type.' DOCS to Construction Space')); |
my ($home,$other,%outhash)=&authorhosts(); |
my ($home,$other,%outhash)=&authorhosts(); |
unless ($home) { return ''; } |
unless ($home) { return ''; } |
my $origcrsid=$ENV{'request.course.id'}; |
my $origcrsid=$env{'request.course.id'}; |
my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); |
my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); |
if (($ENV{'form.authorspace'}) && ($ENV{'form.authorfolder'}=~/\w/)) { |
if (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
# Do the dumping |
# Do the dumping |
unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; } |
unless ($outhash{'home_'.$env{'form.authorspace'}}) { return ''; } |
my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'}); |
my ($ca,$cd)=split(/\@/,$env{'form.authorspace'}); |
$r->print('<h3>'.&mt('Copying Files').'</h3>'); |
$r->print('<h3>'.&mt('Copying Files').'</h3>'); |
my $title=$ENV{'form.authorfolder'}; |
my $title=$env{'form.authorfolder'}; |
$title=~s/[^\w\/]+/\_/g; |
$title=&clean($title); |
my %replacehash=(); |
my %replacehash=(); |
foreach (keys %ENV) { |
foreach (keys %env) { |
if ($_=~/^form\.namefor\_(.+)/) { |
if ($_=~/^form\.namefor\_(.+)/) { |
$replacehash{$1}=$ENV{$_}; |
$replacehash{$1}=$env{$_}; |
} |
} |
} |
} |
my $crs='/uploaded/'.$ENV{'request.course.id'}.'/'; |
my $crs='/uploaded/'.$env{'request.course.id'}.'/'; |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
foreach (keys %replacehash) { |
foreach (keys %replacehash) { |
my $newfilename=$title.'/'.$replacehash{$_}; |
my $newfilename=$title.'/'.$replacehash{$_}; |
$newfilename=~s/[^\w\/\.\/]+/\_/g; |
$newfilename=~s/\.(\w+)$//; |
|
my $ext=$1; |
|
$newfilename=&clean($newfilename); |
|
$newfilename.='.'.$ext; |
my @dirs=split(/\//,$newfilename); |
my @dirs=split(/\//,$newfilename); |
my $path='/home/'.$ca.'/public_html'; |
my $path='/home/'.$ca.'/public_html'; |
my $makepath=$path; |
my $makepath=$path; |
Line 174 sub dumpcourse {
|
Line 186 sub dumpcourse {
|
$r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: '); |
$r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: '); |
if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) { |
if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) { |
if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) { |
if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) { |
print $fh &Apache::loncreatecourse::rewritefile( |
print $fh &Apache::lonclonecourse::rewritefile( |
&Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_), |
&Apache::lonclonecourse::readfile($env{'request.course.id'},$_), |
(%replacehash,$crs => '') |
(%replacehash,$crs => '') |
); |
); |
} else { |
} else { |
print $fh |
print $fh |
&Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_); |
&Apache::lonclonecourse::readfile($env{'request.course.id'},$_); |
} |
} |
$fh->close(); |
$fh->close(); |
} else { |
} else { |
Line 213 sub dumpcourse {
|
Line 225 sub dumpcourse {
|
$r->print('</select>'); |
$r->print('</select>'); |
} |
} |
my $title=$origcrsdata{'description'}; |
my $title=$origcrsdata{'description'}; |
$title=~s/\s+/\_/gs; |
$title=~s/[\/\s]+/\_/gs; |
$title=~s/\W//gs; |
$title=&clean($title); |
$r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />'); |
$r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />'); |
&tiehash(); |
&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>'); |
$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>'); |
$r->print('<tr><td>'.$_.'</td>'); |
my ($ext)=($_=~/\.(\w+)$/); |
my ($ext)=($_=~/\.(\w+)$/); |
my $title=$hash{'title_'.$hash{ |
my $title=$hash{'title_'.$hash{ |
'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}}; |
'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}}; |
$r->print('<td>'.($title?$title:' ').'</td>'); |
$r->print('<td>'.($title?$title:' ').'</td>'); |
unless ($title) { |
if (!$title) { |
$title=$_; |
$title=$_; |
|
} else { |
|
$title=~s|/|_|g; |
} |
} |
$title=~s/\.(\w+)$//; |
$title=~s/\.(\w+)$//; |
$title=~s/[^\w\/]+/\_/gs; |
$title=&clean($title); |
$title.='.'.$ext; |
$title.='.'.$ext; |
$r->print("\n<td><input type='text' size='60' name='namefor_".$_."' value='".$title."' /></td></tr>\n"); |
$r->print("\n<td><input type='text' size='60' name='namefor_".$_."' value='".$title."' /></td></tr>\n"); |
} |
} |
$r->print("</table>\n"); |
$r->print("</table>\n"); |
&untiehash(); |
&untiehash(); |
$r->print( |
$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 |
# ------------------------------------------------------ Generate "export" button |
|
|
sub exportbutton { |
sub exportbutton { |
|
my $type = &Apache::loncommon::course_type(); |
return '</td><td bgcolor="#DDDDCC">'. |
return '</td><td bgcolor="#DDDDCC">'. |
'<input type="submit" name="exportcourse" value="'. |
'<input type="submit" name="exportcourse" value="'. |
&mt('Export Course to IMS').'" />'. |
&mt('Export '.$type.' to IMS').'" />'. |
&Apache::loncommon::help_open_topic('Docs_Export_Course_Docs'); |
&Apache::loncommon::help_open_topic('Docs_Export_Course_Docs'); |
} |
} |
|
|
sub exportcourse { |
sub exportcourse { |
my $r=shift; |
my $r=shift; |
|
my $type = &Apache::loncommon::course_type(); |
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, $ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); |
my $numdisc = keys %discussiontime; |
my $numdisc = keys %discussiontime; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); |
my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); |
Line 260 sub exportcourse {
|
Line 276 sub exportcourse {
|
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['finishexport']); |
['finishexport']); |
if ($ENV{'form.finishexport'}) { |
if ($env{'form.finishexport'}) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['archive','discussion']); |
['archive','discussion']); |
|
|
my @exportitems = (); |
my @exportitems = &Apache::loncommon::get_env_multiple('form.archive'); |
if (defined($ENV{'form.archive'})) { |
my @discussions = &Apache::loncommon::get_env_multiple('form.discussion'); |
if (ref($ENV{'form.archive'}) eq 'ARRAY') { |
|
@exportitems = @{$ENV{'form.archive'}}; |
|
} else { |
|
$exportitems[0] = $ENV{'form.archive'}; |
|
} |
|
} |
|
my @discussions = (); |
|
if (defined($ENV{'form.discussion'})) { |
|
if (ref($ENV{'form.discussion'}) eq 'ARRAY') { |
|
@discussions = $ENV{'form.discussion'}; |
|
} else { |
|
$discussions[0] = $ENV{'form.discussion'}; |
|
} |
|
} |
|
if (@exportitems == 0 && @discussions == 0) { |
if (@exportitems == 0 && @discussions == 0) { |
$outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created. Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export'; |
$outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created. Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export'; |
} else { |
} else { |
Line 296 sub exportcourse {
|
Line 298 sub exportcourse {
|
|
|
#Create zip file in prtspool |
#Create zip file in prtspool |
my $imszipfile = '/prtspool/'. |
my $imszipfile = '/prtspool/'. |
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. |
$env{'user.name'}.'_'.$env{'user.domain'}.'_'. |
time.'_'.rand(1000000000).'.zip'; |
time.'_'.rand(1000000000).'.zip'; |
# zip can cause an sh launch which can pass along all of %ENV |
|
# which can be too large for /bin/sh to handle |
|
my %oldENV=%ENV; |
|
undef(%ENV); |
|
my $cwd = &Cwd::getcwd(); |
my $cwd = &Cwd::getcwd(); |
my $imszip = '/home/httpd/'.$imszipfile; |
my $imszip = '/home/httpd/'.$imszipfile; |
chdir $tempexport; |
chdir $tempexport; |
open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); |
open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); |
close(OUTPUT); |
close(OUTPUT); |
chdir $cwd; |
chdir $cwd; |
%ENV=%oldENV; |
$outcome .= &mt('Download the zip file from <a href="[_1]">IMS '.lc($type).' archive</a><br />',$imszipfile,); |
undef(%oldENV); |
|
$outcome .= 'Download the zip file from <a href="'.$imszipfile.'">IMS course archive</a><br />'; |
|
if ($copyresult) { |
if ($copyresult) { |
$outcome .= 'The following errors occurred during export - '.$copyresult; |
$outcome .= 'The following errors occurred during export - '.$copyresult; |
} |
} |
Line 318 sub exportcourse {
|
Line 314 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 />'; |
$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 />'; |
} |
} |
} |
} |
|
$r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package')); |
$r->print('<html><head><title>Export Course</title></head>'. |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package')); |
&Apache::loncommon::bodytag('Export course to IMS content package')); |
|
$r->print($outcome); |
$r->print($outcome); |
$r->print('</body></html>'); |
$r->print(&Apache::loncommon::end_page()); |
} else { |
} else { |
my $display; |
my $display; |
$display = '<form name="exportdoc" method="post">'."\n"; |
$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">'. |
$display .= '<table border="0" cellspacing="0" cellpadding="3">'. |
'<tr><td><fieldset><legend> <b>Content items</b></legend>'. |
'<tr><td><fieldset><legend> <b>Content items</b></legend>'. |
'<input type="button" value="check all" '. |
'<input type="button" value="check all" '. |
Line 370 sub exportcourse {
|
Line 365 sub exportcourse {
|
if (ref($curRes)) { |
if (ref($curRes)) { |
my $symb = $curRes->symb(); |
my $symb = $curRes->symb(); |
my $ressymb = $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|) { |
unless ($ressymb =~ m|adm/wrapper/adm|) { |
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
} |
} |
Line 460 function containerCheck(item) {
|
Line 455 function containerCheck(item) {
|
|
|
</script> |
</script> |
|; |
|; |
$r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'. |
$r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package', |
&Apache::loncommon::bodytag('Export course to IMS content package' |
$scripttag)); |
)); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package')); |
|
$r->print($display.'</table>'. |
$r->print($display.'</table>'. |
|
'<p><input type="hidden" name="finishexport" value="1">'. |
'<p><input type="hidden" name="finishexport" value="1">'. |
'<input type="submit" name="exportcourse" value="'. |
'<input type="submit" name="exportcourse" value="'. |
&mt('Export Course DOCS').'" /></p></form></body></html>'); |
&mt('Export '.$type.' DOCS').'" /></p></form>'. |
|
&Apache::loncommon::end_page()); |
} |
} |
} |
} |
|
|
Line 482 sub create_ims_store {
|
Line 477 sub create_ims_store {
|
if (!-e $$tempexport) { |
if (!-e $$tempexport) { |
mkdir($$tempexport,0700); |
mkdir($$tempexport,0700); |
} |
} |
$$tempexport .= '/'.$ENV{'user.domain'}.'_'.$ENV{'user.name'}; |
$$tempexport .= '/'.$env{'user.domain'}.'_'.$env{'user.name'}; |
if (!-e $$tempexport) { |
if (!-e $$tempexport) { |
mkdir($$tempexport,0700); |
mkdir($$tempexport,0700); |
} |
} |
Line 499 sub create_ims_store {
|
Line 494 sub create_ims_store {
|
'<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"'. |
'<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"'. |
' xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"'. |
' xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"'. |
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'. |
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'. |
' identifier="MANIFEST-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
' identifier="MANIFEST-'.$env{'request.course.id'}.'-'.$now.'"'. |
' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. |
' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. |
' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". |
' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". |
' <organizations default="ORG-'.$ENV{'request.course.id'}.'-'.$now.'">'."\n". |
' <metadata> |
' <organization identifier="ORG-'.$ENV{'request.course.id'}.'-'.$now.'"'. |
<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". |
' structure="hierarchical">'."\n". |
' <title>'.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'</title>' |
' <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>' |
} else { |
} else { |
$$outcome .= 'An error occurred opening the IMS manifest file.<br />' |
$$outcome .= 'An error occurred opening the IMS manifest file.<br />' |
; |
; |
Line 523 sub build_package {
|
Line 529 sub build_package {
|
my $lastcontainer = 0; |
my $lastcontainer = 0; |
my %parent = (); |
my %parent = (); |
my @dependencies = (); |
my @dependencies = (); |
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
while ($curRes = $it->next()) { |
while ($curRes = $it->next()) { |
if (ref($curRes)) { |
if (ref($curRes)) { |
$count ++; |
$count ++; |
Line 553 sub build_package {
|
Line 559 sub build_package {
|
$count = 0; |
$count = 0; |
my $imsresources; |
my $imsresources; |
my $pkgdepth; |
my $pkgdepth; |
my $included = 0; |
|
while ($curRes = $it->next()) { |
while ($curRes = $it->next()) { |
if ($curRes == $it->BEGIN_MAP()) { |
if ($curRes == $it->BEGIN_MAP()) { |
$prevdepth = $depth; |
$prevdepth = $depth; |
Line 574 sub build_package {
|
Line 579 sub build_package {
|
$isvisible = 'false'; |
$isvisible = 'false'; |
} |
} |
unless ($curRes->is_sequence()) { |
unless ($curRes->is_sequence()) { |
$resourceref = 'identifierref="RES-'.$ENV{'request.course.id'}.'-'.$count.'"'; |
$resourceref = 'identifierref="RES-'.$env{'request.course.id'}.'-'.$count.'"'; |
} |
} |
if (($depth <= $prevdepth) && ($count > 1) && ($included)) { |
my $step = $prevdepth - $depth; |
print $ims_manifest "\n".' </item>'."\n"; |
if (($step >= 0) && ($count > 1)) { |
|
while ($step >= 0) { |
|
print $ims_manifest "\n".' </item>'."\n"; |
|
$step --; |
|
} |
} |
} |
$included = 1; |
|
$prevdepth = $depth; |
$prevdepth = $depth; |
|
|
my $itementry = |
my $itementry = |
'<item identifier="ITEM-'.$ENV{'request.course.id'}.'-'.$count. |
'<item identifier="ITEM-'.$env{'request.course.id'}.'-'.$count. |
'" isvisible="'.$isvisible.'" '.$resourceref.'>'. |
'" isvisible="'.$isvisible.'" '.$resourceref.'>'. |
'<title>'.$curRes->title().'</title>'; |
'<title>'.$curRes->title().'</title>'; |
print $ims_manifest "\n".$itementry; |
print $ims_manifest "\n".$itementry; |
Line 594 sub build_package {
|
Line 602 sub build_package {
|
&process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport); |
&process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport); |
if ($content_file) { |
if ($content_file) { |
$imsresources .= "\n". |
$imsresources .= "\n". |
' <resource identifier="RES-'.$ENV{'request.course.id'}.'-'.$count. |
' <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count. |
'" type="webcontent" href="'.$content_file.'">'."\n". |
'" type="webcontent" href="'.$content_file.'">'."\n". |
' <file href="'.$content_file.'" />'."\n"; |
' <file href="'.$content_file.'" />'."\n"; |
foreach (@hrefs) { |
foreach (@hrefs) { |
Line 604 sub build_package {
|
Line 612 sub build_package {
|
if (grep/^$count$/,@$discussions) { |
if (grep/^$count$/,@$discussions) { |
my $ressymb = $symb; |
my $ressymb = $symb; |
my $mode; |
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|) { |
unless ($ressymb =~ m|adm/wrapper/adm|) { |
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
} |
} |
Line 621 sub build_package {
|
Line 629 sub build_package {
|
} |
} |
} |
} |
$pkgdepth = $depth; |
$pkgdepth = $depth; |
} else { |
|
$included = 0; |
|
} |
} |
} |
} |
} |
} |
Line 657 sub process_content {
|
Line 663 sub process_content {
|
my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_; |
my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_; |
my $content_type; |
my $content_type; |
my $message; |
my $message; |
# find where user is author or co-author |
|
my %roleshash = &Apache::lonnet::get_my_roles(); |
|
my @uploads = (); |
my @uploads = (); |
if ($curRes->is_sequence()) { |
if ($curRes->is_sequence()) { |
$content_type = 'sequence'; |
$content_type = 'sequence'; |
Line 691 sub process_content {
|
Line 695 sub process_content {
|
if ($contents) { |
if ($contents) { |
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
} |
} |
} elsif ($symb =~ m-lib/templates/examupload\.problem-m) { |
} elsif ($symb =~ m-lib/templates/examupload\.problem$-) { |
$content_type = 'examupload'; |
$content_type = 'examupload'; |
} elsif ($symb =~ m-adm/(\w+)/(\w+)/(\d+)/bulletinboard$-) { |
} elsif ($symb =~ m-adm/($match_domain)/($match_username)/(\d+)/bulletinboard$-) { |
$content_type = 'bulletinboard'; |
$content_type = 'bulletinboard'; |
my $contents = &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2); |
my $contents = &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2); |
if ($contents) { |
if ($contents) { |
Line 705 sub process_content {
|
Line 709 sub process_content {
|
if ($contents) { |
if ($contents) { |
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
} |
} |
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
|
} elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) { |
} elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) { |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
} elsif ($symb =~ m-\.(sequence|page)___\d+___([^/])/([^/])-) { |
} elsif ($symb =~ m-\.(sequence|page)___\d+___([^/]+)/([^/]+)-) { |
my $coauth = $3.':'.$2.':ca'; |
|
my $canedit = 0; |
my $canedit = 0; |
if ($2 eq $ENV{'user.domain'} && $3 eq $ENV{'user.name'}) { |
if ($2 eq $env{'user.domain'} && $3 eq $env{'user.name'}) { |
$canedit= 1; |
$canedit= 1; |
} elsif (defined($roleshash{$coauth})) { |
|
if ($roleshash{$coauth} =~ /(\d+):(\d+)/) { |
|
if (($1 < time || $1 == 0) && ($2 == 0 || $2 >= time)) { |
|
$canedit = 1; |
|
} |
|
} elsif ($roleshash{$coauth} eq ':') { |
|
$canedit = 1; |
|
} |
|
} |
} |
|
# only include problem code where current user is author |
if ($canedit) { |
if ($canedit) { |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource'); |
} else { |
} else { |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit'); |
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit'); |
} |
} |
|
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
} |
} |
if (@uploads > 0) { |
if (@uploads > 0) { |
foreach my $item (@uploads) { |
foreach my $item (@uploads) { |
Line 769 sub replicate_content {
|
Line 765 sub replicate_content {
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
if ($copiedfile = Apache::File->new('>'.$destination)) { |
my $content; |
my $content; |
if ($caller eq 'resource') { |
if ($caller eq 'resource') { |
$content = &Apache::lonnet::getfile($url); |
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $filepath = &Apache::lonnet::filelocation($respath,$url); |
|
$content = &Apache::lonnet::getfile($filepath); |
if ($content eq -1) { |
if ($content eq -1) { |
$$message = 'Could not copy file '.$filename; |
$$message = 'Could not copy file '.$filename; |
} else { |
} else { |
&extract_media($content,$count,$tempexport,$href,'resource'); |
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'resource'); |
$repstatus = 'ok'; |
$repstatus = 'ok'; |
} |
} |
} elsif ($caller eq 'noedit' || $caller eq 'uploaded' || $caller eq 'templateupload') { |
} elsif ($caller eq 'uploaded' || $caller eq 'templateupload') { |
my $rtncode; |
my $rtncode; |
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
if ($url =~ /\.html?$/i) { |
if ($url =~ /\.html?$/i) { |
&extract_media(\$content,$count,$tempexport,$href,'uploaded'); |
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'uploaded'); |
} |
} |
} else { |
} else { |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
$$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n"; |
} |
} |
|
} elsif ($caller eq 'noedit') { |
|
# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. |
|
$repstatus = 'ok'; |
|
$content = 'Not the owner of this resource'; |
} |
} |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
print $copiedfile $content; |
print $copiedfile $content; |
} |
} |
close($copiedfile); |
close($copiedfile); |
} else { |
} else { |
$$message = 'Could not open destination file for '.$filename."\n"; |
$$message = 'Could not open destination file for '.$filename."<br />\n"; |
} |
} |
} else { |
} else { |
$$message = 'Could not determine name of file for '.$symb."\n"; |
$$message = 'Could not determine name of file for '.$symb."<br />\n"; |
} |
} |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
$content_name = $count.'/'.$filename; |
$content_name = 'resources/'.$count.'/'.$filename; |
} |
} |
return $content_name; |
return $content_name; |
} |
} |
|
|
sub extract_media { |
sub extract_media { |
my ($content,$count,$tempexport,$href,$caller) = @_; |
my ($url,$cdom,$cnum,$content,$count,$tempexport,$href,$message,$caller) = @_; |
# @$href will contain path to any embedded resources in the content. |
my ($dirpath,$container); |
# For LON-CAPA problems this would be images. applets etc. |
my %allfiles = (); |
# For uploaded HTML files this would be images etc. |
my %codebase = (); |
# paths will be in the form $count/res/$file, and urls in the $content will be rewritten with the new paths. |
if ($url =~ m-(.*/)([^/]+)$-) { |
|
$dirpath = $1; |
|
$container = $2; |
|
} else { |
|
$dirpath = $url; |
|
$container = ''; |
|
} |
|
&Apache::lonnet::extract_embedded_items(undef,undef,\%allfiles,\%codebase,$content); |
|
foreach my $embed_file (keys(%allfiles)) { |
|
my $filename; |
|
if ($embed_file =~ m#([^/]+)$#) { |
|
$filename = $1; |
|
} else { |
|
$filename = $embed_file; |
|
} |
|
my $newname = 'res/'.$filename; |
|
my ($rtncode,$embed_content,$repstatus); |
|
my $embed_url; |
|
if ($embed_file =~ m-^/-) { |
|
$embed_url = $embed_file; # points to absolute path |
|
} else { |
|
if ($embed_file =~ m-https?://-) { |
|
next; # points to url |
|
} else { |
|
$embed_url = $dirpath.$embed_file; # points to relative path |
|
} |
|
} |
|
if ($caller eq 'resource') { |
|
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url); |
|
$embed_content = &Apache::lonnet::getfile($embed_path); |
|
unless ($embed_content eq -1) { |
|
$repstatus = 'ok'; |
|
} |
|
} elsif ($caller eq 'uploaded') { |
|
|
|
$repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode); |
|
} |
|
if ($repstatus eq 'ok') { |
|
my $destination = $tempexport.'/resources/'.$count.'/res'; |
|
if (!-e "$destination") { |
|
mkdir($destination,0755); |
|
} |
|
$destination .= '/'.$filename; |
|
my $copiedfile; |
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
|
print $copiedfile $embed_content; |
|
push @{$href}, 'resources/'.$count.'/res/'.$filename; |
|
my $attrib_regexp = ''; |
|
if (@{$allfiles{$embed_file}} > 1) { |
|
$attrib_regexp = join('|',@{$allfiles{$embed_file}}); |
|
} else { |
|
$attrib_regexp = $allfiles{$embed_file}[0]; |
|
} |
|
$$content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$embed_file\E(['"]?)#$1$newname$2#gi; |
|
if ($caller eq 'resource' && $container =~ /\.(problem|library)$/) { |
|
$$content =~ s#\Q$embed_file\E#$newname#gi; |
|
} |
|
} |
|
} else { |
|
$$message .= 'replication of embedded file - '.$embed_file.' in '.$url.' failed, reason -'.$rtncode."<br />\n"; |
|
} |
|
} |
return; |
return; |
} |
} |
|
|
Line 829 sub store_template {
|
Line 893 sub store_template {
|
close($storetemplate); |
close($storetemplate); |
} |
} |
if ($content_type eq 'external') { |
if ($content_type eq 'external') { |
return $count.'/'.$content_type.'.html'; |
return 'resources/'.$count.'/'.$content_type.'.html'; |
} else { |
} else { |
return $count.'/'.$content_type.'.xml'; |
return 'resources/'.$count.'/'.$content_type.'.xml'; |
} |
} |
} |
} |
} |
} |
Line 840 sub store_template {
|
Line 904 sub store_template {
|
# Imports the given (name, url) resources into the course |
# Imports the given (name, url) resources into the course |
# coursenum, coursedom, and folder must precede the list |
# coursenum, coursedom, and folder must precede the list |
sub group_import { |
sub group_import { |
my $coursenum = shift; |
my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_; |
my $coursedom = shift; |
|
my $folder = shift; |
while (@files) { |
my $container = shift; |
my $name = shift(@files); |
my $caller = shift; |
my $url = shift(@files); |
while (@_) { |
#FIXME check if file exists before overwriting, might be restoring it |
my $name = shift; |
if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) |
my $url = shift; |
&& ($caller eq 'londocs') |
if (($url =~ m#^/uploaded/$coursedom/$coursenum/(default_\d+\.)(page|sequence)$#) && ($caller eq 'londocs')) { |
&& (!&Apache::lonnet::stat_file($url))) { |
|
|
my $errtext = ''; |
my $errtext = ''; |
my $fatal = 0; |
my $fatal = 0; |
my $newmapstr = '<map>'."\n". |
my $newmapstr = '<map>'."\n". |
Line 856 sub group_import {
|
Line 921 sub group_import {
|
'<link from="1" to="2" index="1"></link>'."\n". |
'<link from="1" to="2" index="1"></link>'."\n". |
'<resource id="2" src="" type="finish"></resource>'."\n". |
'<resource id="2" src="" type="finish"></resource>'."\n". |
'</map>'; |
'</map>'; |
$ENV{'form.output'}=$newmapstr; |
$env{'form.output'}=$newmapstr; |
my $home=&Apache::lonnet::homeserver($coursenum,$coursedom); |
my $result=&Apache::lonnet::finishuserfileupload($coursenum,$coursedom, |
my $result=&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$home, |
|
'output',$1.$2); |
'output',$1.$2); |
if ($result != m|^/uploaded/|) { |
if ($result != m|^/uploaded/|) { |
$errtext.='Map not saved: A network error occured when trying to save the new map. '; |
$errtext.='Map not saved: A network error occured when trying to save the new map. '; |
Line 869 sub group_import {
|
Line 933 sub group_import {
|
} |
} |
} |
} |
if ($url) { |
if ($url) { |
my $idx = $#Apache::lonratedt::resources + 1; |
my $idx = &LONCAPA::map::getresidx($url); |
$Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx; |
$LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; |
my $ext = 'false'; |
my $ext = 'false'; |
if ($url=~/^http:\/\//) { $ext = 'true'; } |
if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; } |
$url =~ s/:/\:/g; |
$url = &LONCAPA::map::qtunescape($url); |
$name =~ s/:/\:/g; |
$name = &LONCAPA::map::qtunescape($name); |
$Apache::lonratedt::resources[$idx] = |
$LONCAPA::map::resources[$idx] = |
join ':', ($name, $url, $ext, 'normal', 'res'); |
join ':', ($name, $url, $ext, 'normal', 'res'); |
} |
} |
} |
} |
Line 886 sub breadcrumbs {
|
Line 950 sub breadcrumbs {
|
my ($where)=@_; |
my ($where)=@_; |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
my (@folders); |
my (@folders); |
if ($ENV{'form.pagepath'}) { |
if ($env{'form.pagepath'}) { |
@folders = split('&',$ENV{'form.pagepath'}); |
@folders = split('&',$env{'form.pagepath'}); |
} else { |
} else { |
@folders=split('&',$ENV{'form.folderpath'}); |
@folders=split('&',$env{'form.folderpath'}); |
} |
} |
my $folderpath; |
my $folderpath; |
|
my $cpinfo=''; |
|
my $plain=''; |
|
if ($env{'form.markedcopy_url'}) { |
|
$cpinfo='&markedcopy_url='. |
|
&escape($env{'form.markedcopy_url'}). |
|
'&markedcopy_title='. |
|
&escape($env{'form.markedcopy_title'}); |
|
} |
|
my $randompick=-1; |
|
my $isencrypted=0; |
|
my $ishidden=0; |
while (@folders) { |
while (@folders) { |
my $folder=shift(@folders); |
my $folder=shift(@folders); |
my $foldername=shift(@folders); |
my $foldername=shift(@folders); |
if ($folderpath) {$folderpath.='&';} |
if ($folderpath) {$folderpath.='&';} |
$folderpath.=$folder.'&'.$foldername; |
$folderpath.=$folder.'&'.$foldername; |
my $url='/adm/coursedocs?folderpath='. |
my $url='/adm/coursedocs?folderpath='. |
&Apache::lonnet::escape($folderpath); |
&escape($folderpath); |
|
my $name=&unescape($foldername); |
|
# randompick number, hidden, encrypted is appended with ":"s to the foldername |
|
$name=~s/\:(\d*)\:(\w*)\:(\w*)$//; |
|
if ($1 ne '') { |
|
$randompick=$1; |
|
} else { |
|
$randompick=-1; |
|
} |
|
if ($2) { $ishidden=1; } |
|
if ($3) { $isencrypted=1; } |
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{'href'=>$url, |
{'href'=>$url.$cpinfo, |
'title'=>&Apache::lonnet::unescape($foldername), |
'title'=>$name, |
'text'=>'<font size="+1">'. |
'text'=>'<font size="+1">'. |
&Apache::lonnet::unescape($foldername).'</font>' |
$name.'</font>', |
|
'no_mt'=>1, |
}); |
}); |
|
$plain.=$name.' > '; |
|
} |
|
$plain=~s/\>\;\s*$//; |
|
return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', |
|
'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); } |
} |
} |
return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef, |
|
0,'nohelp'); |
|
} |
} |
|
|
sub editor { |
|
my ($r,$coursenum,$coursedom,$folder,$allowed)=@_; |
|
|
|
$r->print(&breadcrumbs($folder)); |
# |
|
# 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 { |
|
my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output)=@_; |
my $errtext=''; |
my $errtext=''; |
my $fatal=0; |
my $fatal=0; |
my $container='sequence'; |
my $container='sequence'; |
if ($ENV{'form.pagepath'}) { |
if ($env{'form.pagepath'}) { |
$container='page'; |
$container='page'; |
} |
} |
($errtext,$fatal)= |
($errtext,$fatal)= |
&mapread($coursenum,$coursedom,$folder.'.'.$container); |
&mapread($coursenum,$coursedom,$folder.'.'.$container); |
if ($#Apache::lonratedt::order<1) { |
if ($#LONCAPA::map::order<1) { |
$Apache::lonratedt::order[0]=1; |
my $idx=&LONCAPA::map::getresidx(); |
$Apache::lonratedt::resources[1]=''; |
if ($idx<=0) { $idx=1; } |
|
$LONCAPA::map::order[0]=$idx; |
|
$LONCAPA::map::resources[$idx]=''; |
|
} |
|
if (defined($env{'form.markcopy'})) { |
|
# Mark for copying |
|
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,$plain)=&breadcrumbs($folder); |
|
$r->print($breadcrumbtrail); |
if ($fatal) { |
if ($fatal) { |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
} else { |
} else { |
# ------------------------------------------------------------ Process commands |
# ------------------------------------------------------------ Process commands |
|
|
# ---------------- if they are for this folder and user allowed to make changes |
# ---------------- if they are for this folder and user allowed to make changes |
if (($allowed) && ($ENV{'form.folder'} eq $folder)) { |
if (($allowed) && ($env{'form.folder'} eq $folder)) { |
# set parameters and change order |
# set parameters and change order |
if (defined($ENV{'form.setparms'})) { |
&snapshotbefore(); |
my $idx=$ENV{'form.setparms'}; |
if ($env{'form.changeparms'}) { |
|
my $idx=$env{'form.setparms'}; |
# set parameters |
# set parameters |
if ($ENV{'form.randpick_'.$idx}) { |
if ($env{'form.changeparms'} eq 'randompick') { |
&Apache::lonratedt::storeparameter($idx,'parameter_randompick',$ENV{'form.randpick_'.$idx},'int_pos'); |
if ($env{'form.randpick_'.$idx}) { |
} else { |
&LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos'); |
&Apache::lonratedt::delparameter($idx,'parameter_randompick'); |
&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}) { |
if ($env{'form.changeparms'} eq 'hiddenresource') { |
&Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno'); |
if ($env{'form.hidprs_'.$idx}) { |
} else { |
&LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno'); |
&Apache::lonratedt::delparameter($idx,'parameter_hiddenresource'); |
&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}) { |
if ($env{'form.changeparms'} eq 'encrypturl') { |
&Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno'); |
if ($env{'form.encprs_'.$idx}) { |
} else { |
&LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno'); |
&Apache::lonratedt::delparameter($idx,'parameter_encrypturl'); |
&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 |
# change order |
|
my $newpos=$env{'form.newpos'}-1; |
my $newpos=$ENV{'form.newpos'}-1; |
my $currentpos=$env{'form.currentpos'}-1; |
my $currentpos=$ENV{'form.currentpos'}-1; |
my $i; |
my $i; |
my @neworder=(); |
my @neworder=(); |
if ($newpos>$currentpos) { |
if ($newpos>$currentpos) { |
|
# moving stuff up |
# moving stuff up |
for ($i=0;$i<$currentpos;$i++) { |
for ($i=0;$i<$currentpos;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i]; |
$neworder[$i]=$LONCAPA::map::order[$i]; |
} |
} |
for ($i=$currentpos;$i<$newpos;$i++) { |
for ($i=$currentpos;$i<$newpos;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i+1]; |
$neworder[$i]=$LONCAPA::map::order[$i+1]; |
} |
} |
$neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; |
$neworder[$newpos]=$LONCAPA::map::order[$currentpos]; |
for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) { |
for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i]; |
$neworder[$i]=$LONCAPA::map::order[$i]; |
} |
} |
} else { |
} else { |
# moving stuff down |
# moving stuff down |
for ($i=0;$i<$newpos;$i++) { |
for ($i=0;$i<$newpos;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i]; |
$neworder[$i]=$LONCAPA::map::order[$i]; |
} |
} |
$neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; |
$neworder[$newpos]=$LONCAPA::map::order[$currentpos]; |
for ($i=$newpos+1;$i<$currentpos+1;$i++) { |
for ($i=$newpos+1;$i<$currentpos+1;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i-1]; |
$neworder[$i]=$LONCAPA::map::order[$i-1]; |
} |
} |
for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) { |
for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) { |
$neworder[$i]=$Apache::lonratedt::order[$i]; |
$neworder[$i]=$LONCAPA::map::order[$i]; |
} |
|
} |
} |
@Apache::lonratedt::order=@neworder; |
|
} |
} |
|
@LONCAPA::map::order=@neworder; |
# store the changed version |
# store the changed version |
|
|
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); |
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); |
if ($fatal) { |
if ($fatal) { |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
return; |
return; |
} |
} |
|
|
} |
} |
|
|
|
if ($env{'form.pastemarked'}) { |
|
# paste resource to end of list |
|
my $url=$env{'form.markedcopy_url'}; |
|
my $title=$env{'form.markedcopy_title'}; |
|
# Maps need to be copied first |
|
if (($url=~/\.(page|sequence)$/) || ($url=~/^\/uploaded\//)) { |
|
$title=&mt('Copy of').' '.$title; |
|
my $newid=$$.time; |
|
$url=~/^(.+)\.(\w+)$/; |
|
my $newurl=$1.$newid.'.'.$2; |
|
my $storefn=$newurl; |
|
$storefn=~s{^/\w+/$match_domain/$match_username/}{}; |
|
&Apache::lonclonecourse::writefile |
|
($env{'request.course.id'},$storefn, |
|
&Apache::lonnet::getfile($url)); |
|
$url=$newurl; |
|
} |
|
$title = &LONCAPA::map::qtunescape($title); |
|
my $ext='false'; |
|
if ($url=~/^http\:\/\//) { $ext='true'; } |
|
$url = &LONCAPA::map::qtunescape($url); |
|
# Now insert the URL at the bottom |
|
my $newidx=&LONCAPA::map::getresidx($url); |
|
$LONCAPA::map::resources[$newidx]= |
|
$title.':'.$url.':'.$ext.':normal:res'; |
|
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx; |
|
# Store the result |
|
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); |
|
if ($fatal) { |
|
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
|
return; |
|
} |
|
|
# upload a file, if present |
} |
if (($ENV{'form.uploaddoc.filename'}) && |
$r->print($upload_output); |
($ENV{'form.cmd'}=~/^upload_(\w+)/)) { |
if ($env{'form.cmd'}) { |
if ( ($folder=~/^$1/) || ($1 eq 'default') ) { |
my ($cmd,$idx)=split(/\_/,$env{'form.cmd'}); |
# 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 $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs'); |
|
my $ext='false'; |
|
if ($url=~/^http\:\/\//) { $ext='true'; } |
|
$url=~s/\:/\:/g; |
|
my $comment=$ENV{'form.comment'}; |
|
$comment=~s/\</\<\;/g; |
|
$comment=~s/\>/\>\;/g; |
|
$comment=~s/\:/\:/g; |
|
if ($folder=~/^supplemental/) { |
|
$comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'. |
|
$ENV{'user.domain'}.'___&&&___'.$comment; |
|
} |
|
my $newidx=$#Apache::lonratedt::resources+1; |
|
$Apache::lonratedt::resources[$newidx]= |
|
$comment.':'.$url.':'.$ext.':normal:res'; |
|
$Apache::lonratedt::order[$#Apache::lonratedt::order+1]= |
|
$newidx; |
|
|
|
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); |
|
if ($fatal) { |
|
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
|
return; |
|
} |
|
} |
|
} |
|
if ($ENV{'form.cmd'}) { |
|
my ($cmd,$idx)=split(/\_/,$ENV{'form.cmd'}); |
|
if ($cmd eq 'del') { |
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/|) { |
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); |
&Apache::lonnet::removeuploadedurl($url); |
|
} else { |
|
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
} |
} |
for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) { |
for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) { |
$Apache::lonratedt::order[$i]= |
$LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; |
$Apache::lonratedt::order[$i+1]; |
} |
|
$#LONCAPA::map::order--; |
|
} elsif ($cmd eq 'cut') { |
|
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') { |
} elsif ($cmd eq 'up') { |
if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) { |
if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) { |
my $i=$Apache::lonratedt::order[$idx-1]; |
my $i=$LONCAPA::map::order[$idx-1]; |
$Apache::lonratedt::order[$idx-1]= |
$LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx]; |
$Apache::lonratedt::order[$idx]; |
$LONCAPA::map::order[$idx] = $i; |
$Apache::lonratedt::order[$idx]=$i; |
|
} |
} |
} elsif ($cmd eq 'down') { |
} elsif ($cmd eq 'down') { |
if (defined($Apache::lonratedt::order[$idx+1])) { |
if (defined($LONCAPA::map::order[$idx+1])) { |
my $i=$Apache::lonratedt::order[$idx+1]; |
my $i=$LONCAPA::map::order[$idx+1]; |
$Apache::lonratedt::order[$idx+1]= |
$LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx]; |
$Apache::lonratedt::order[$idx]; |
$LONCAPA::map::order[$idx] = $i; |
$Apache::lonratedt::order[$idx]=$i; |
|
} |
} |
} elsif ($cmd eq 'rename') { |
} 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(/\:/, |
my ($rtitle,@rrest)=split(/\:/, |
$Apache::lonratedt::resources[ |
$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); |
$Apache::lonratedt::order[$idx]]); |
my $comment=$env{'form.title'}; |
my $comment= |
$comment = &LONCAPA::map::qtunescape($comment); |
&HTML::Entities::decode($ENV{'form.title'}); |
|
$comment=~s/\</\<\;/g; |
|
$comment=~s/\>/\>\;/g; |
|
$comment=~s/\:/\:/g; |
|
if ($comment=~/\S/) { |
if ($comment=~/\S/) { |
$Apache::lonratedt::resources[ |
$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]= |
$Apache::lonratedt::order[$idx]]= |
$comment.':'.join(':',@rrest); |
$comment.':'.join(':',@rrest); |
|
} |
} |
|
# Devalidate title cache |
|
my $renamed_url=&LONCAPA::map::qtescape($rrest[0]); |
|
&Apache::lonnet::devalidate_title_cache($renamed_url); |
} |
} |
# Store the changed version |
# Store the changed version |
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
Line 1081 sub editor {
|
Line 1390 sub editor {
|
} |
} |
} |
} |
# Group import/search |
# Group import/search |
if ($ENV{'form.importdetail'}) { |
if ($env{'form.importdetail'}) { |
my @imports; |
my @imports; |
foreach (split(/\&/,$ENV{'form.importdetail'})) { |
# &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'}); |
|
foreach (split(/\&/,$env{'form.importdetail'})) { |
if (defined($_)) { |
if (defined($_)) { |
my ($name,$url)=split(/\=/,$_); |
my ($name,$url)=split(/\=/,$_); |
$name=&Apache::lonnet::unescape($name); |
$name=&unescape($name); |
$url=&Apache::lonnet::unescape($url); |
$url=&unescape($url); |
push @imports, $name, $url; |
push @imports, $name, $url; |
} |
} |
} |
} |
# Store the changed version |
# Store the changed version |
($errtext,$fatal)=group_import($coursenum, $coursedom, $folder, |
($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder, |
$container,'londocs',@imports); |
$container,'londocs',@imports); |
if ($fatal) { |
if ($fatal) { |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
Line 1100 sub editor {
|
Line 1410 sub editor {
|
} |
} |
} |
} |
# Loading a complete map |
# Loading a complete map |
if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) { |
if ($env{'form.loadmap'}) { |
foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) { |
if ($env{'form.importmap'}=~/\w/) { |
my $idx=$#Apache::lonratedt::resources; |
foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) { |
$idx++; |
my ($title,$url,$ext,$type)=split(/\:/,$_); |
$Apache::lonratedt::resources[$idx]=$_; |
my $idx=&LONCAPA::map::getresidx($url); |
$Apache::lonratedt::order |
$LONCAPA::map::resources[$idx]=$_; |
[$#Apache::lonratedt::order+1]=$idx; |
$LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; |
} |
} |
|
|
# Store the changed version |
# Store the changed version |
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
$folder.'.'.$container); |
$folder.'.'.$container); |
if ($fatal) { |
if ($fatal) { |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
$r->print('<p><font color="red">'.$errtext.'</font></p>'); |
return; |
return; |
} |
} |
|
} else { |
|
$r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>'); |
|
} |
} |
} |
|
&log_differences($plain); |
} |
} |
# ---------------------------------------------------------------- End commands |
# ---------------------------------------------------------------- End commands |
# ---------------------------------------------------------------- Print screen |
# ---------------------------------------------------------------- Print screen |
my $idx=0; |
my $idx=0; |
my $shown=0; |
my $shown=0; |
|
if (($ishidden) || ($isencrypted) || ($randompick>=0)) { |
|
$r->print('<p>'.&mt('Parameters').':<ul>'. |
|
($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':''). |
|
($ishidden?'<li>'.&mt('contents hidden').'</li>':''). |
|
($isencrypted?'<li>'.&mt('URLs hidden').'</li>':''). |
|
'</ul></p>'); |
|
} |
|
if ($randompick>=0) { |
|
$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>'); |
$r->print('<table>'); |
foreach (@Apache::lonratedt::order) { |
foreach (@LONCAPA::map::order) { |
my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]); |
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) { $name=(split(/\//,$url))[-1]; } |
unless ($name) { $idx++; next; } |
unless ($name) { $idx++; next; } |
$r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); |
$r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); |
Line 1134 sub editor {
|
Line 1459 sub editor {
|
unless ($shown) { |
unless ($shown) { |
$r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>'); |
$r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>'); |
} |
} |
$r->print('</table>'); |
$r->print("\n</table>\n"); |
|
if ($env{'form.markedcopy_url'}) { |
|
$r->print(<<ENDPASTE); |
|
<p><form name="pasteform" action="/adm/coursedocs" method="post"> |
|
<input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" /> |
|
<input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" /> |
|
ENDPASTE |
|
$r->print( |
|
'<input type="submit" name="pastemarked" value="'.&mt('Paste'). |
|
'" /> '.&Apache::loncommon::filedescription( |
|
(split(/\./,$env{'form.markedcopy_url'}))[-1]).': '. |
|
$env{'form.markedcopy_title'}); |
|
if ($container eq 'page') { |
|
$r->print(<<PAGEINFO); |
|
<input type="hidden" name="pagepath" value="$env{'form.pagepath'}" /> |
|
<input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" /> |
|
PAGEINFO |
|
} else { |
|
$r->print(<<FOLDERINFO); |
|
<input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> |
|
FOLDERINFO |
|
} |
|
$r->print('</form></p>'); |
|
} |
} |
} |
} |
} |
|
|
|
sub process_file_upload { |
|
my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_; |
|
# upload a file, if present |
|
my $parseaction; |
|
if ($env{'form.parserflag'}) { |
|
$parseaction = 'parse'; |
|
} |
|
my $phase_status; |
|
my $folder=$env{'form.folder'}; |
|
if ($folder eq '') { |
|
$folder='default'; |
|
} |
|
if ( ($folder=~/^$uploadcmd/) || ($uploadcmd eq 'default') ) { |
|
my $errtext=''; |
|
my $fatal=0; |
|
my $container='sequence'; |
|
if ($env{'form.pagepath'}) { |
|
$container='page'; |
|
} |
|
($errtext,$fatal)= |
|
&mapread($coursenum,$coursedom,$folder.'.'.$container); |
|
if ($#LONCAPA::map::order<1) { |
|
$LONCAPA::map::order[0]=1; |
|
$LONCAPA::map::resources[1]=''; |
|
} |
|
if ($fatal) { |
|
return 'failed'; |
|
} |
|
my $destination = 'docs/'; |
|
if ($folder =~ /^supplemental/) { |
|
$destination = 'supplemental/'; |
|
} |
|
if (($folder eq 'default') || ($folder eq 'supplemental')) { |
|
$destination .= 'default/'; |
|
} elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { |
|
$destination .= $2.'/'; |
|
} |
|
# 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=&LONCAPA::map::getresidx(); |
|
$destination .= $newidx; |
|
my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination, |
|
$parseaction,$allfiles, |
|
$codebase); |
|
my $ext='false'; |
|
if ($url=~/^http\:\/\//) { $ext='true'; } |
|
$url = &LONCAPA::map::qtunescape($url); |
|
my $comment=$env{'form.comment'}; |
|
$comment = &LONCAPA::map::qtunescape($comment); |
|
if ($folder=~/^supplemental/) { |
|
$comment=time.'___&&&___'.$env{'user.name'}.'___&&&___'. |
|
$env{'user.domain'}.'___&&&___'.$comment; |
|
} |
|
|
|
$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) { |
|
$$upload_output .= '<p><font color="red">'.$errtext.'</font></p>'; |
|
return 'failed'; |
|
} else { |
|
if ($parseaction eq 'parse') { |
|
my $total_embedded = keys(%{$allfiles}); |
|
if ($total_embedded > 0) { |
|
my $num = 0; |
|
my $state = ' |
|
<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="'.&escape($url).'" /> |
|
<input type="hidden" name="phasetwo" value="'.$total_embedded.'" />'; |
|
$phase_status = 'phasetwo'; |
|
|
|
$$upload_output .= |
|
'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'. |
|
&ask_for_embedded_content('/adm/coursedocs', |
|
$state,$allfiles,$codebase); |
|
} else { |
|
$$upload_output .= 'No embedded items identified<br />'; |
|
} |
|
} |
|
} |
|
} |
|
return $phase_status; |
|
} |
|
|
|
sub ask_for_embedded_content { |
|
my ($actionurl,$state,$allfiles,$codebase,$args)=@_; |
|
my $upload_output = ' |
|
<form name="upload_embedded" action="'.$actionurl.'" |
|
method="post" enctype="multipart/form-data">'; |
|
$upload_output .= $state; |
|
$upload_output .= '<b>Upload embedded files</b>:<br />'. |
|
&Apache::loncommon::start_data_table(); |
|
|
|
my $num = 0; |
|
foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%{$allfiles})) { |
|
$upload_output .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$embed_file.'</td><td>'; |
|
if ($args->{'ignore_remote_references'} |
|
&& $embed_file =~ m{^\w+://}) { |
|
$upload_output.='<span class="LC_warning">'.&mt("URL points to other server.").'</span>'; |
|
} elsif ($args->{'error_on_invalid_names'} |
|
&& $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) { |
|
|
|
$upload_output.='<span class="LC_warning">'.&mt("Invalid characters").'</span>'; |
|
|
|
} else { |
|
|
|
$upload_output .=' |
|
<input name="embedded_item_'.$num.'" type="file" value="bob" /> |
|
<input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />'; |
|
my $attrib = join(':',@{$$allfiles{$embed_file}}); |
|
$upload_output .= |
|
"\n\t\t". |
|
'<input name="embedded_attrib_'.$num.'" type="hidden" value="'. |
|
$attrib.'" />'; |
|
if (exists($$codebase{$embed_file})) { |
|
$upload_output .= |
|
"\n\t\t". |
|
'<input name="codebase_'.$num.'" type="hidden" value="'. |
|
&escape($$codebase{$embed_file}).'" />'; |
|
} |
|
} |
|
$upload_output .= '</td>'.&Apache::loncommon::end_data_table_row(); |
|
$num++; |
|
} |
|
$upload_output .= &Apache::loncommon::end_data_table().'<br /> |
|
<input type ="hidden" name="number_embedded_items" value="'.$num.'" /> |
|
<input type ="submit" value="'.&mt('Upload Listed Files').'" /> |
|
'.&mt('(only files for which a location has been provided will be uploaded)').' |
|
</form>'; |
|
return $upload_output; |
|
} |
|
|
|
sub process_secondary_uploads { |
|
my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_; |
|
my $folder=$env{'form.folder'}; |
|
my $destination = 'docs/'; |
|
if ($folder =~ /^supplemental/) { |
|
$destination = 'supplemental/'; |
|
} |
|
if (($folder eq 'default') || ($folder eq 'supplemental')) { |
|
$destination .= 'default/'; |
|
} elsif ($folder =~ /^(default|supplemental)_(\d+)$/) { |
|
$destination .= $2.'/'; |
|
} |
|
$destination .= $newidx; |
|
my ($url,$filename); |
|
$url=&Apache::lonnet::userfileupload($formname.$num,1,$destination); |
|
($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$}); |
|
return $filename; |
|
} |
|
|
# --------------------------------------------------------------- An entry line |
# --------------------------------------------------------------- An entry line |
|
|
sub entryline { |
sub entryline { |
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_; |
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_; |
$title=~s/\&colon\;/\:/g; |
$title=&HTML::Entities::encode($title,'"<>&\''); |
$title=&HTML::Entities::encode(&HTML::Entities::decode( |
|
&Apache::lonnet::unescape($title)),'"<>&\''); |
|
my $renametitle=$title; |
my $renametitle=$title; |
my $foldertitle=$title; |
my $foldertitle=$title; |
my $pagetitle=$title; |
my $pagetitle=$title; |
my $orderidx=$Apache::lonratedt::order[$index]; |
my $orderidx=$LONCAPA::map::order[$index]; |
if ($title=~ /^(\d+)___&&&___(\w+)___&&&___(\w+)___&&&___(.*)$/ ) { |
if ($title=~ /^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/ ) { |
$foldertitle=&Apache::lontexconvert::msgtexconverted($4); |
$foldertitle=&Apache::lontexconvert::msgtexconverted($4); |
$renametitle=$4; |
$renametitle=$4; |
$title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '. |
$title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '. |
&Apache::loncommon::plainname($2,$3).': <br />'. |
&Apache::loncommon::plainname($2,$3).': <br />'. |
$foldertitle; |
$foldertitle; |
} |
} |
|
$renametitle=~s/\\/\\\\/g; |
$renametitle=~s/\"\;/\\\"/g; |
$renametitle=~s/\"\;/\\\"/g; |
my $line='<tr>'; |
my $line='<tr>'; |
# Edit commands |
# Edit commands |
my $container; |
my $container; |
my $folderpath; |
my $folderpath; |
if ($ENV{'form.folderpath'}) { |
if ($env{'form.folderpath'}) { |
$container = 'sequence'; |
$container = 'sequence'; |
$folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'}); |
$folderpath=&escape($env{'form.folderpath'}); |
# $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"'); |
# $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"'); |
} |
} |
my ($pagepath,$pagesymb); |
my ($pagepath,$pagesymb); |
if ($ENV{'form.pagepath'}) { |
if ($env{'form.pagepath'}) { |
$container = 'page'; |
$container = 'page'; |
$pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'}); |
$pagepath=&escape($env{'form.pagepath'}); |
$pagesymb=&Apache::lonnet::escape($ENV{'form.pagesymb'}); |
$pagesymb=&escape($env{'form.pagesymb'}); |
|
} |
|
my $cpinfo=''; |
|
if ($env{'form.markedcopy_url'}) { |
|
$cpinfo='&markedcopy_url='. |
|
&escape($env{'form.markedcopy_url'}). |
|
'&markedcopy_title='. |
|
&escape($env{'form.markedcopy_title'}); |
} |
} |
if ($allowed) { |
if ($allowed) { |
my $incindex=$index+1; |
my $incindex=$index+1; |
my $selectbox=''; |
my $selectbox=''; |
if ($folder!~/^supplemental/) { |
if (($folder!~/^supplemental/) && |
|
($#LONCAPA::map::order>0) && |
|
((split(/\:/, |
|
$LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] |
|
ne '') && |
|
((split(/\:/, |
|
$LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] |
|
ne '')) { |
$selectbox= |
$selectbox= |
'<input type="hidden" name="currentpos" value="'.$incindex.'" />'. |
'<input type="hidden" name="currentpos" value="'.$incindex.'" />'. |
'<select name="newpos" onChange="this.form.submit()">'; |
'<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) { |
if ($i==$incindex) { |
$selectbox.='<option value="" selected="1">('.$i.')</option>'; |
$selectbox.='<option value="" selected="1">('.$i.')</option>'; |
} else { |
} else { |
Line 1192 sub entryline {
|
Line 1709 sub entryline {
|
'up' => 'Move Up', |
'up' => 'Move Up', |
'dw' => 'Move Down', |
'dw' => 'Move Down', |
'rm' => 'Remove', |
'rm' => 'Remove', |
'rn' => 'Rename'); |
'ct' => 'Cut', |
if ($ENV{'form.pagepath'}) { |
'rn' => 'Rename', |
|
'cp' => 'Copy'); |
|
my $nocopy=0; |
|
my $nocut=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; |
|
} |
|
} |
|
} |
|
if ($url=~/^\/res\/lib\/templates\//) { |
|
$nocopy=1; |
|
$nocut=1; |
|
} |
|
my $copylink=' '; |
|
my $cutlink=' '; |
|
if ($env{'form.pagepath'}) { |
|
if (!$nocopy) { |
|
$copylink=(<<ENDCOPY); |
|
<a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'> |
|
<font size="-2" color="#000099">$lt{'cp'}</font></a></td> |
|
ENDCOPY |
|
} |
|
if (!$nocut) { |
|
$cutlink=(<<ENDCUT); |
|
<a href='javascript:cutres("$pagepath","$index","$renametitle","page","$pagesymb");'> |
|
<font size="-2" color="#550044">$lt{'ct'}</font></a> |
|
ENDCUT |
|
} |
$line.=(<<END); |
$line.=(<<END); |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<input type="hidden" name="pagepath" value="$ENV{'form.pagepath'}" /> |
<input type="hidden" name="pagepath" value="$env{'form.pagepath'}" /> |
<input type="hidden" name="pagesymb" value="$ENV{'form.pagesymb'}" /> |
<input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" /> |
|
<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="setparms" value="$orderidx" /> |
|
<input type="hidden" name="changeparms" value="0" /> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb'> |
<a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath&pagesymb=$pagesymb'> |
<a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
</table></td> |
</table></td> |
<td>$selectbox |
<td>$selectbox |
</td><td bgcolor="#DDDDDD"> |
</td><td bgcolor="#DDDDDD"> |
<a href='javascript:removeres("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<a href='javascript:removeres("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
|
$cutlink |
<a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'> |
<font size="-2" color="#009900">$lt{'rn'}</font></a></td> |
<font size="-2" color="#009900">$lt{'rn'}</font></a> |
|
$copylink |
END |
END |
} else { |
} else { |
|
if (!$nocopy) { |
|
$copylink=(<<ENDCOPY); |
|
<a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'> |
|
<font size="-2" color="#000099">$lt{'cp'}</font></a></td> |
|
ENDCOPY |
|
} |
|
if (!$nocut) { |
|
$cutlink=(<<ENDCUT); |
|
<a href='javascript:cutres("$folderpath","$index","$renametitle","sequence");'> |
|
<font size="-2" color="#550044">$lt{'ct'}</font></a> |
|
ENDCUT |
|
} |
$line.=(<<END); |
$line.=(<<END); |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<form name="entry_$index" action="/adm/coursedocs" method="post"> |
<input type="hidden" name="folderpath" value="$ENV{'form.folderpath'}" /> |
<input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> |
|
<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="setparms" value="$orderidx" /> |
|
<input type="hidden" name="changeparms" value="0" /> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<td><table border='0' cellspacing='2' cellpadding='0'> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath'> |
<a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<a href='/adm/coursedocs?cmd=down_$index&folderpath=$folderpath'> |
<a href='/adm/coursedocs?cmd=down_$index&folderpath=$folderpath$cpinfo'> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
<img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr> |
</table></td> |
</table></td> |
<td>$selectbox |
<td>$selectbox |
</td><td bgcolor="#DDDDDD"> |
</td><td bgcolor="#DDDDDD"> |
<a href='javascript:removeres("$folderpath","$index","$renametitle","sequence");'> |
<a href='javascript:removeres("$folderpath","$index","$renametitle","sequence");'> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
<font size="-2" color="#990000">$lt{'rm'}</font></a> |
|
$cutlink |
<a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'> |
<a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'> |
<font size="-2" color="#009900">$lt{'rn'}</font></a></td> |
<font size="-2" color="#009900">$lt{'rn'}</font></a> |
|
$copylink |
END |
END |
} |
} |
} |
} |
Line 1248 END
|
Line 1818 END
|
if ($uploaded) { |
if ($uploaded) { |
if ($extension eq 'sequence') { |
if ($extension eq 'sequence') { |
$icon=$iconpath.'/folder_closed.gif'; |
$icon=$iconpath.'/folder_closed.gif'; |
$url=~/$coursenum\/([\/\w]+)\.sequence$/; |
$url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/; |
$url='/adm/coursedocs?'; |
$url='/adm/coursedocs?'; |
$folderarg=$1; |
$folderarg=$1; |
$isfolder=1; |
$isfolder=1; |
} elsif ($extension eq 'page') { |
} elsif ($extension eq 'page') { |
$icon=$iconpath.'/page.gif'; |
$icon=$iconpath.'/page.gif'; |
$url=~/$coursenum\/([\/\w]+)\.page$/; |
$url=~/\Q$coursenum\E\/([\/\w]+)\.page$/; |
$pagearg=$1; |
$pagearg=$1; |
$url='/adm/coursedocs?'; |
$url='/adm/coursedocs?'; |
$ispage=1; |
$ispage=1; |
Line 1262 END
|
Line 1832 END
|
&Apache::lonnet::allowuploaded('/adm/coursedoc',$url); |
&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)) { |
if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) { |
my $symb=&Apache::lonnet::symbclean( |
my $symb=&Apache::lonnet::symbclean( |
&Apache::lonnet::declutter('uploaded/'. |
&Apache::lonnet::declutter('uploaded/'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'. |
$env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/'.$folder. |
$env{'course.'.$env{'request.course.id'}.'.num'}.'/'.$folder. |
'.sequence'). |
'.sequence'). |
'___'.$residx.'___'. |
'___'.$residx.'___'. |
&Apache::lonnet::declutter($url)); |
&Apache::lonnet::declutter($url)); |
Line 1286 END
|
Line 1856 END
|
} elsif ($url=~m|^/ext/|) { |
} elsif ($url=~m|^/ext/|) { |
$url='/adm/wrapper'.$url; |
$url='/adm/wrapper'.$url; |
} |
} |
$url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); |
if (&Apache::lonnet::symbverify($symb,$url)) { |
|
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); |
|
} else { |
|
$url=''; |
|
} |
if ($container eq 'page') { |
if ($container eq 'page') { |
my $symb=$ENV{'form.pagesymb'}; |
my $symb=$env{'form.pagesymb'}; |
|
|
$url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); |
$url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]); |
$url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); |
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); |
} |
} |
} |
} |
my $parameterset=' '; |
my $parameterset=' '; |
if ($isfolder) { |
if ($isfolder || $extension eq 'sequence') { |
my $foldername=&Apache::lonnet::escape($foldertitle); |
my $foldername=&escape($foldertitle); |
my $folderpath=$ENV{'form.folderpath'}; |
my $folderpath=$env{'form.folderpath'}; |
if ($folderpath) { $folderpath.='&' }; |
if ($folderpath) { $folderpath.='&' }; |
$folderpath.=$folderarg.'&'.$foldername; |
# Append randompick number, hidden, and encrypted with ":" to foldername, |
$url.='folderpath='.&Apache::lonnet::escape($folderpath); |
# so it gets transferred between levels |
|
$folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx, |
|
'parameter_randompick'))[0] |
|
.':'.((&LONCAPA::map::getparameter($orderidx, |
|
'parameter_hiddenresource'))[0]=~/^yes$/i) |
|
.':'.((&LONCAPA::map::getparameter($orderidx, |
|
'parameter_encrypturl'))[0]=~/^yes$/i); |
|
$url.='folderpath='.&escape($folderpath).$cpinfo; |
$parameterset='<label>'.&mt('Randomly Pick: '). |
$parameterset='<label>'.&mt('Randomly Pick: '). |
'<input type="text" size="4" name="randpick_'.$orderidx.'" value="'. |
'<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'. |
(&Apache::lonratedt::getparameter($orderidx, |
(&LONCAPA::map::getparameter($orderidx, |
'parameter_randompick'))[0]. |
'parameter_randompick'))[0]. |
'" />'.'</label>'; |
'" />'. |
|
'<font size="-2"><a href="javascript:void(0)">'.&mt('Save').'</a></font></label>'; |
|
|
} |
} |
if ($ispage) { |
if ($ispage) { |
my $pagename=&Apache::lonnet::escape($pagetitle); |
my $pagename=&escape($pagetitle); |
my $pagepath; |
my $pagepath; |
my $folderpath=$ENV{'form.folderpath'}; |
my $folderpath=$env{'form.folderpath'}; |
if ($folderpath) { $pagepath = $folderpath.'&' }; |
if ($folderpath) { $pagepath = $folderpath.'&' }; |
$pagepath.=$pagearg.'&'.$pagename; |
$pagepath.=$pagearg.'&'.$pagename; |
my $symb=$ENV{'form.pagesymb'}; |
my $symb=$env{'form.pagesymb'}; |
if (!$symb) { |
if (!$symb) { |
my $path='uploaded/'. |
my $path='uploaded/'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'. |
$env{'course.'.$env{'request.course.id'}.'.domain'}.'/'. |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/'; |
$env{'course.'.$env{'request.course.id'}.'.num'}.'/'; |
$symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence', |
$symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence', |
$residx, |
$residx, |
$path.$pagearg.'.page'); |
$path.$pagearg.'.page'); |
} |
} |
$url.='pagepath='.&Apache::lonnet::escape($pagepath). |
$url.='pagepath='.&escape($pagepath). |
'&pagesymb='.&Apache::lonnet::escape($symb); |
'&pagesymb='.&escape($symb).$cpinfo; |
} |
} |
$line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon. |
$line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon. |
'" border="0"></a></td>'. |
'" border="0"></a></td>'. |
"<td bgcolor='#FFFFBB'><a href='$url'>$title</a></td>"; |
"<td bgcolor='#FFFFBB'>".($url?"<a href=\"$url\">":'').$title. |
|
($url?'</a>':' <font size="-2">'.&mt('(re-initialize course to access)').'</font>')."</td>"; |
if (($allowed) && ($folder!~/^supplemental/)) { |
if (($allowed) && ($folder!~/^supplemental/)) { |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'hd' => 'Hidden', |
'hd' => 'Hidden', |
'ec' => 'URL hidden', |
'ec' => 'URL hidden'); |
'sp' => 'Store Parameters'); |
|
my $enctext= |
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= |
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); |
$line.=(<<ENDPARMS); |
<td bgcolor="#BBBBFF"><font size='-2'> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<nobr><label><input type="checkbox" name="hidprs_$orderidx" $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'> |
<td bgcolor="#BBBBFF"><font size='-2'> |
<nobr><label><input type="checkbox" name="encprs_$orderidx" $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> |
<td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td> |
<td bgcolor="#BBBBFF"><font size='-2'> |
|
<input type="submit" value="$lt{'sp'}" /> |
|
</font></td> |
|
ENDPARMS |
ENDPARMS |
} |
} |
$line.="</form></tr>"; |
$line.="</form></tr>"; |
Line 1358 ENDPARMS
|
Line 1937 ENDPARMS
|
sub tiehash { |
sub tiehash { |
my ($mode)=@_; |
my ($mode)=@_; |
$hashtied=0; |
$hashtied=0; |
if ($ENV{'request.course.fn'}) { |
if ($env{'request.course.fn'}) { |
if ($mode eq 'write') { |
if ($mode eq 'write') { |
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", |
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db", |
&GDBM_WRCREAT(),0640)) { |
&GDBM_WRCREAT(),0640)) { |
$hashtied=2; |
$hashtied=2; |
} |
} |
} else { |
} else { |
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", |
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db", |
&GDBM_READER(),0640)) { |
&GDBM_READER(),0640)) { |
$hashtied=1; |
$hashtied=1; |
} |
} |
Line 1376 sub tiehash {
|
Line 1955 sub tiehash {
|
sub untiehash { |
sub untiehash { |
if ($hashtied) { untie %hash; } |
if ($hashtied) { untie %hash; } |
$hashtied=0; |
$hashtied=0; |
|
return OK; |
} |
} |
|
|
# --------------------------------------------------------------- check on this |
# --------------------------------------------------------------- check on this |
|
|
sub checkonthis { |
sub checkonthis { |
my ($r,$url,$level,$title)=@_; |
my ($r,$url,$level,$title)=@_; |
$url=&Apache::lonnet::unescape($url); |
$url=&unescape($url); |
$alreadyseen{$url}=1; |
$alreadyseen{$url}=1; |
$r->rflush(); |
$r->rflush(); |
if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) { |
if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) { |
Line 1395 sub checkonthis {
|
Line 1975 sub checkonthis {
|
if ($url=~/^\/res\//) { |
if ($url=~/^\/res\//) { |
my $result=&Apache::lonnet::repcopy( |
my $result=&Apache::lonnet::repcopy( |
&Apache::lonnet::filelocation('',$url)); |
&Apache::lonnet::filelocation('',$url)); |
if ($result==OK) { |
if ($result eq 'ok') { |
$r->print('<font color="green">'.&mt('ok').'</font>'); |
$r->print('<font color="green">'.&mt('ok').'</font>'); |
$r->rflush(); |
$r->rflush(); |
&Apache::lonnet::countacc($url); |
&Apache::lonnet::countacc($url); |
Line 1407 sub checkonthis {
|
Line 1987 sub checkonthis {
|
$r->print(' '); |
$r->print(' '); |
} |
} |
$r->print('- '.&mt('Rendering').': '); |
$r->print('- '.&mt('Rendering').': '); |
my $oldpath=$ENV{'request.filename'}; |
my ($errorcount,$warningcount)=split(/:/, |
$ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url); |
&Apache::lonnet::ssi_body($url, |
&Apache::lonxml::xmlparse($r,'web', |
('grade_target'=>'web', |
&Apache::lonnet::getfile( |
'return_only_error_and_warning_counts' => 1))); |
&Apache::lonnet::filelocation('',$url))); |
if (($errorcount) || |
undef($Apache::lonhomework::parsing_a_problem); |
($warningcount)) { |
$ENV{'request.filename'}=$oldpath; |
if ($errorcount) { |
if (($Apache::lonxml::errorcount) || |
|
($Apache::lonxml::warningcount)) { |
|
if ($Apache::lonxml::errorcount) { |
|
$r->print('<img src="/adm/lonMisc/bomb.gif" /><font color="red"><b>'. |
$r->print('<img src="/adm/lonMisc/bomb.gif" /><font color="red"><b>'. |
$Apache::lonxml::errorcount.' '. |
$errorcount.' '. |
&mt('error(s)').'</b></font> '); |
&mt('error(s)').'</b></font> '); |
} |
} |
if ($Apache::lonxml::warningcount) { |
if ($warningcount) { |
$r->print('<font color="blue">'. |
$r->print('<font color="blue">'. |
$Apache::lonxml::warningcount.' '. |
$warningcount.' '. |
&mt('warning(s)').'</font>'); |
&mt('warning(s)').'</font>'); |
} |
} |
} else { |
} else { |
Line 1438 sub checkonthis {
|
Line 2015 sub checkonthis {
|
&checkonthis($r,$_,$level+1); |
&checkonthis($r,$_,$level+1); |
} |
} |
} |
} |
} elsif ($result==HTTP_SERVICE_UNAVAILABLE) { |
} elsif ($result eq 'unavailable') { |
$r->print('<font color="red"><b>'.&mt('connection down').'</b></font>'); |
$r->print('<font color="red"><b>'.&mt('connection down').'</b></font>'); |
} elsif ($result==HTTP_NOT_FOUND) { |
} elsif ($result eq 'not_found') { |
unless ($url=~/\$/) { |
unless ($url=~/\$/) { |
$r->print('<font color="red"><b>'.&mt('not found').'</b></font>'); |
$r->print('<font color="red"><b>'.&mt('not found').'</b></font>'); |
} else { |
} else { |
Line 1455 sub checkonthis {
|
Line 2032 sub checkonthis {
|
|
|
|
|
# |
# |
|
# ----------------------------------------------------------------- List Symbs |
|
# |
|
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()) { |
|
$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 |
# -------------------------------------------------------------- Verify Content |
# |
# |
sub verifycontent { |
sub verifycontent { |
my $r=shift; |
my ($r) = @_; |
|
my $type = &Apache::loncommon::course_type(); |
my $loaderror=&Apache::lonnet::overloaderror($r); |
my $loaderror=&Apache::lonnet::overloaderror($r); |
if ($loaderror) { return $loaderror; } |
if ($loaderror) { return $loaderror; } |
|
$r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents')); |
$r->print('<html><head><title>Verify Content</title></head>'. |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents')); |
&Apache::loncommon::bodytag('Verify Course Documents')); |
|
$hashtied=0; |
$hashtied=0; |
undef %alreadyseen; |
undef %alreadyseen; |
%alreadyseen=(); |
%alreadyseen=(); |
&tiehash(); |
&tiehash(); |
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($hash{$_}=~/\.(page|sequence)$/) { |
if ($hash{$_}=~/\.(page|sequence)$/) { |
if (($_=~/^src_/) && ($alreadyseen{&Apache::lonnet::unescape($hash{$_})})) { |
if (($_=~/^src_/) && ($alreadyseen{&unescape($hash{$_})})) { |
$r->print('<hr /><font color="red">'. |
$r->print('<hr /><font color="red">'. |
&mt('The following sequence or page is included more than once in your course: '). |
&mt('The following sequence or page is included more than once in your '.$type.': '). |
&Apache::lonnet::unescape($hash{$_}).'</font><br />'. |
&unescape($hash{$_}).'</font><br />'. |
&mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />')); |
&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}); |
&checkonthis($r,$hash{$_},0,$hash{'title_'.$1}); |
} |
} |
} |
} |
Line 1486 sub verifycontent {
|
Line 2081 sub verifycontent {
|
&mt('Return to DOCS').'</a>'); |
&mt('Return to DOCS').'</a>'); |
} |
} |
|
|
|
|
# -------------------------------------------------------------- Check Versions |
# -------------------------------------------------------------- Check Versions |
|
|
|
sub devalidateversioncache { |
|
my $src=shift; |
|
&Apache::lonnet::devalidate_cache_new('courseresversion',$env{'request.course.id'}.'_'. |
|
&Apache::lonnet::clutter($src)); |
|
} |
|
|
sub checkversions { |
sub checkversions { |
my $r=shift; |
my ($r) = @_; |
$r->print('<html><head><title>Check Versions</title></head>'. |
my $type = &Apache::loncommon::course_type(); |
&Apache::loncommon::bodytag('Check Course Document Versions')); |
$r->print(&Apache::loncommon::start_page("Check $type Document Versions")); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions")); |
my $header=''; |
my $header=''; |
my $startsel=''; |
my $startsel=''; |
my $monthsel=''; |
my $monthsel=''; |
Line 1502 sub checkversions {
|
Line 2105 sub checkversions {
|
my $starttime=0; |
my $starttime=0; |
my $haschanged=0; |
my $haschanged=0; |
my %setversions=&Apache::lonnet::dump('resourceversions', |
my %setversions=&Apache::lonnet::dump('resourceversions', |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
|
|
$hashtied=0; |
$hashtied=0; |
&tiehash(); |
&tiehash(); |
my %newsetversions=(); |
my %newsetversions=(); |
if ($ENV{'form.setmostrecent'}) { |
if ($env{'form.setmostrecent'}) { |
$haschanged=1; |
$haschanged=1; |
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
$newsetversions{$1}='mostrecent'; |
$newsetversions{$1}='mostrecent'; |
|
&devalidateversioncache($1); |
} |
} |
} |
} |
} elsif ($ENV{'form.setcurrent'}) { |
} elsif ($env{'form.setcurrent'}) { |
$haschanged=1; |
$haschanged=1; |
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
my $getvers=&Apache::lonnet::getversion($1); |
my $getvers=&Apache::lonnet::getversion($1); |
if ($getvers>0) { |
if ($getvers>0) { |
$newsetversions{$1}=$getvers; |
$newsetversions{$1}=$getvers; |
|
&devalidateversioncache($1); |
} |
} |
} |
} |
} |
} |
} elsif ($ENV{'form.setversions'}) { |
} elsif ($env{'form.setversions'}) { |
$haschanged=1; |
$haschanged=1; |
foreach (keys %ENV) { |
foreach (keys %env) { |
if ($_=~/^form\.set_version_(.+)$/) { |
if ($_=~/^form\.set_version_(.+)$/) { |
my $src=$1; |
my $src=$1; |
if (($ENV{$_}) && ($ENV{$_} ne $setversions{$src})) { |
if (($env{$_}) && ($env{$_} ne $setversions{$src})) { |
$newsetversions{$src}=$ENV{$_}; |
$newsetversions{$src}=$env{$_}; |
|
&devalidateversioncache($src); |
} |
} |
} |
} |
} |
} |
} |
} |
if ($haschanged) { |
if ($haschanged) { |
if (&Apache::lonnet::put('resourceversions',\%newsetversions, |
if (&Apache::lonnet::put('resourceversions',\%newsetversions, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}) eq 'ok') { |
$env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') { |
$r->print('<h1>'.&mt('Your Version Settings have been Stored').'</h1>'); |
$r->print('<h1>'.&mt('Your Version Settings have been Saved').'</h1>'); |
} else { |
} else { |
$r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>'); |
$r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Save your Version Settings').'</font></h1>'); |
} |
} |
&mark_hash_old(); |
&mark_hash_old(); |
} |
} |
&changewarning($r,''); |
&changewarning($r,''); |
if ($ENV{'form.timerange'} eq 'all') { |
if ($env{'form.timerange'} eq 'all') { |
# show all documents |
# show all documents |
$header=&mt('All Documents in Course'); |
$header=&mt('All Documents in '.$type); |
$allsel=1; |
$allsel=1; |
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
if ($_=~/^ids\_(\/res\/.+)$/) { |
Line 1560 sub checkversions {
|
Line 2166 sub checkversions {
|
} else { |
} else { |
# show documents which changed |
# show documents which changed |
%changes=&Apache::lonnet::dump |
%changes=&Apache::lonnet::dump |
('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
('versionupdate',$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
my $firstkey=(keys %changes)[0]; |
my $firstkey=(keys %changes)[0]; |
unless ($firstkey=~/^error\:/) { |
unless ($firstkey=~/^error\:/) { |
unless ($ENV{'form.timerange'}) { |
unless ($env{'form.timerange'}) { |
$ENV{'form.timerange'}=604800; |
$env{'form.timerange'}=604800; |
} |
} |
my $seltext=&mt('during the last').' '.$ENV{'form.timerange'}.' ' |
my $seltext=&mt('during the last').' '.$env{'form.timerange'}.' ' |
.&mt('seconds'); |
.&mt('seconds'); |
if ($ENV{'form.timerange'}==-1) { |
if ($env{'form.timerange'}==-1) { |
$seltext='since start of course'; |
$seltext='since start of course'; |
$startsel='selected'; |
$startsel='selected'; |
$ENV{'form.timerange'}=time; |
$env{'form.timerange'}=time; |
} |
} |
$starttime=time-$ENV{'form.timerange'}; |
$starttime=time-$env{'form.timerange'}; |
if ($ENV{'form.timerange'}==2592000) { |
if ($env{'form.timerange'}==2592000) { |
$seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$monthsel='selected'; |
$monthsel='selected'; |
} elsif ($ENV{'form.timerange'}==604800) { |
} elsif ($env{'form.timerange'}==604800) { |
$seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$weeksel='selected'; |
$weeksel='selected'; |
} elsif ($ENV{'form.timerange'}==86400) { |
} elsif ($env{'form.timerange'}==86400) { |
$seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')'; |
$daysel='selected'; |
$daysel='selected'; |
} |
} |
Line 1591 sub checkversions {
|
Line 2197 sub checkversions {
|
} |
} |
} |
} |
%setversions=&Apache::lonnet::dump('resourceversions', |
%setversions=&Apache::lonnet::dump('resourceversions', |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
my %lt=&Apache::lonlocal::texthash |
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', |
'lm' => 'Version changes since last Month', |
'lw' => 'Version changes since last Week', |
'lw' => 'Version changes since last Week', |
'sy' => 'Version changes since Yesterday', |
'sy' => 'Version changes since Yesterday', |
Line 1603 sub checkversions {
|
Line 2209 sub checkversions {
|
'fi' => 'File', |
'fi' => 'File', |
'md' => 'Modification Date', |
'md' => 'Modification Date', |
'mr' => 'Most recently published Version', |
'mr' => 'Most recently published Version', |
've' => 'Version used in Course', |
've' => 'Version used in '.$type, |
'vu' => 'Set Version to be used in Course', |
'vu' => 'Set Version to be used in '.$type, |
'sv' => 'Set Versions to be used in Course according to Selections below', |
'sv' => 'Set Versions to be used in '.$type.' according to Selections below', |
'sm' => 'Keep all Resources up-to-date with most recent Versions (default)', |
'sm' => 'Keep all Resources up-to-date with most recent Versions (default)', |
'sc' => 'Set all Resource Versions to current Version (Fix Versions)', |
'sc' => 'Set all Resource Versions to current Version (Fix Versions)', |
'di' => 'Differences'); |
'di' => 'Differences'); |
Line 1652 ENDHEADERS
|
Line 2258 ENDHEADERS
|
'<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '. |
'<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '. |
'<font size="+1">'.$currentversion.'</font>'. |
'<font size="+1">'.$currentversion.'</font>'. |
'</nobr></td>'. |
'</nobr></td>'. |
'<td title="'.$lt{'ve'}.'"><nobr>In Course: '. |
'<td title="'.$lt{'ve'}.'"><nobr>In '.$type.': '. |
'<font size="+1">'); |
'<font size="+1">'); |
# Used in course |
# Used in course |
my $usedversion=$hash{'version_'.$linkurl}; |
my $usedversion=$hash{'version_'.$linkurl}; |
Line 1753 sub is_hash_old {
|
Line 2359 sub is_hash_old {
|
} |
} |
|
|
sub changewarning { |
sub changewarning { |
my ($r,$postexec)=@_; |
my ($r,$postexec,$message,$url)=@_; |
if (!&is_hash_old()) { return; } |
if (!&is_hash_old()) { return; } |
my $pathvar='folderpath'; |
my $pathvar='folderpath'; |
my $path=&Apache::lonnet::escape($ENV{'form.folderpath'}); |
my $path=&escape($env{'form.folderpath'}); |
if (defined($ENV{'form.pagepath'})) { |
if (!defined($url)) { |
$pathvar='pagepath'; |
if (defined($env{'form.pagepath'})) { |
$path=&Apache::lonnet::escape($ENV{'form.pagepath'}); |
$pathvar='pagepath'; |
$path.='&symb='.&Apache::lonnet::escape($ENV{'form.pagesymb'}); |
$path=&escape($env{'form.pagepath'}); |
} |
$path.='&pagesymb='.&escape($env{'form.pagesymb'}); |
$r->print( |
} |
'<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. |
$url='/adm/coursedocs?'.$pathvar.'='.$path; |
'<form method="post" action="/adm/roles" target="loncapaclient">'. |
} |
'<input type="hidden" name="orgurl" value="/adm/coursedocs?'. |
my $course_type = &Apache::loncommon::course_type(); |
$pathvar.'='.$path. |
if (!defined($message)) { |
|
$message='Changes will become active for your current session after [_1], or the next time you log in.'; |
|
} |
|
$r->print("\n\n". |
|
'<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'."\n". |
|
'<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'. |
|
'<input type="hidden" name="orgurl" value="'.$url. |
'" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'. |
'" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'. |
&mt('Changes will become active for your current session after'). |
&mt($message,' <input type="hidden" name="'. |
' <input type="hidden" name="'. |
$env{'request.role'}.'" value="1" /><input type="button" value="'. |
$ENV{'request.role'}.'" value="1" /><input type="button" value="'. |
&mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />'). |
&mt('re-initializing course').'" onClick="reinit(this.form)"/>'.&mt(', or the next time you log in.'). |
$help{'Caching'}.'</font></h3></form>'."\n\n"); |
$help{'Caching'}.'</font></h3></form>'); |
} |
|
|
|
# =========================================== 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 |
# ================================================================ Main Handler |
Line 1781 sub handler {
|
Line 2408 sub handler {
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
my $type = &Apache::loncommon::course_type(); |
|
|
# --------------------------------------------- Initialize help topics for this |
# --------------------------------------------- Initialize help topics for this |
foreach ('Adding_Course_Doc','Main_Course_Documents', |
foreach ('Adding_Course_Doc','Main_Course_Documents', |
'Adding_External_Resource','Navigate_Content', |
'Adding_External_Resource','Navigate_Content', |
'Adding_Folders','Docs_Overview', 'Load_Map', |
'Adding_Folders','Docs_Overview', 'Load_Map', |
'Supplemental','Score_Upload_Form','Adding_Pages', |
'Supplemental','Score_Upload_Form','Adding_Pages', |
'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', |
'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', |
'Check_Resource_Versions','Verify_Content') { |
'Check_Resource_Versions','Verify_Content') { |
$help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); |
$help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); |
} |
} |
# Composite help files |
# Composite help files |
$help{'Syllabus'} = &Apache::loncommon::help_open_topic( |
$help{'Syllabus'} = &Apache::loncommon::help_open_topic( |
'Docs_About_Syllabus,Docs_Editing_Templated_Pages'); |
'Docs_About_Syllabus,Docs_Editing_Templated_Pages'); |
Line 1802 sub handler {
|
Line 2430 sub handler {
|
'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages'); |
'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages'); |
$help{'My Personal Info'} = &Apache::loncommon::help_open_topic( |
$help{'My Personal Info'} = &Apache::loncommon::help_open_topic( |
'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); |
'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'); |
$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'}) { |
|
&init_breadcrumbs('verify','Verify Content'); |
&verifycontent($r); |
&verifycontent($r); |
} elsif ($ENV{'form.versions'}) { |
} 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); |
&checkversions($r); |
} elsif ($ENV{'form.dumpcourse'}) { |
} elsif ($allowed && $env{'form.dumpcourse'}) { |
|
&init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space'); |
&dumpcourse($r); |
&dumpcourse($r); |
} elsif ($ENV{'form.exportcourse'}) { |
} elsif ($allowed && $env{'form.exportcourse'}) { |
|
&init_breadcrumbs('exportcourse','Export '.&Apache::loncommon::course_type().' to IMS'); |
&exportcourse($r); |
&exportcourse($r); |
} else { |
} else { |
# is this a standard course? |
# is this a standard course? |
|
|
my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//); |
my $standard=($env{'request.course.uri'}=~/^\/uploaded\//); |
my $forcestandard = 0; |
my $forcestandard = 0; |
my $forcesupplement; |
my $forcesupplement; |
my $script=''; |
my $script=''; |
my $allowed; |
|
my $events=''; |
|
my $showdoc=0; |
my $showdoc=0; |
my $containertag; |
my $containertag; |
my $uploadtag; |
my $uploadtag; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['folderpath','pagepath','pagesymb']); |
['folderpath','pagepath', |
if ($ENV{'form.folderpath'}) { |
'pagesymb','markedcopy_url', |
my (@folderpath)=split('&',$ENV{'form.folderpath'}); |
'markedcopy_title']); |
$ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath)); |
if ($env{'form.folderpath'}) { |
$ENV{'form.folder'}=pop(@folderpath); |
my (@folderpath)=split('&',$env{'form.folderpath'}); |
} |
$env{'form.foldername'}=&unescape(pop(@folderpath)); |
if ($ENV{'form.pagepath'}) { |
$env{'form.folder'}=pop(@folderpath); |
my (@pagepath)=split('&',$ENV{'form.pagepath'}); |
} |
$ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath)); |
if ($env{'form.pagepath'}) { |
$ENV{'form.folder'}=pop(@pagepath); |
my (@pagepath)=split('&',$env{'form.pagepath'}); |
|
$env{'form.pagename'}=&unescape(pop(@pagepath)); |
|
$env{'form.folder'}=pop(@pagepath); |
$containertag = '<input type="hidden" name="pagepath" value="" />'. |
$containertag = '<input type="hidden" name="pagepath" value="" />'. |
'<input type="hidden" name="pagesymb" value="" />'; |
'<input type="hidden" name="pagesymb" value="" />'; |
$uploadtag = '<input type="hidden" name="pagepath" value="'.$ENV{'form.pagepath'}.'" />'. |
$uploadtag = '<input type="hidden" name="pagepath" value="'.$env{'form.pagepath'}.'" />'. |
'<input type="hidden" name="pagesymb" value="'.$ENV{'form.pagesymb'}.'" />'; |
'<input type="hidden" name="pagesymb" value="'.$env{'form.pagesymb'}.'" />'; |
} |
} |
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { |
if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { |
$showdoc='/'.$1; |
$showdoc='/'.$1; |
} |
} |
unless ($showdoc) { # got called from remote |
unless ($showdoc) { # got called from remote |
if (($ENV{'form.folder'}=~/^default_/) || |
if (($env{'form.folder'}=~/^(?:group|default)_/) || |
($ENV{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) { |
($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) { |
$forcestandard = 1; |
$forcestandard = 1; |
} |
} |
$forcesupplement=($ENV{'form.folder'}=~/^supplemental_/); |
$forcesupplement=($env{'form.folder'}=~/^supplemental_/); |
|
|
# does this user have privileges to post, etc? |
|
$allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'}); |
|
if ($allowed) { |
if ($allowed) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']); |
$script=&Apache::lonratedt::editscript('simple'); |
$script=&Apache::lonratedt::editscript('simple'); |
} |
} |
} else { # got called in sequence from course |
} else { # got called in sequence from course |
$allowed=0; |
$allowed=0; |
$script='</script>'.&Apache::lonmenu::registerurl(1,undef).'<script>'; |
|
$events='onLoad="'.&Apache::lonmenu::loadevents. |
|
'" onUnload="'.&Apache::lonmenu::unloadevents.'"'; |
|
} |
} |
|
|
# get course data |
# get course data |
my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
|
# get personal data |
# get personal data |
|
my $uname=$env{'user.name'}; |
my $uname=$ENV{'user.name'}; |
my $udom=$env{'user.domain'}; |
my $udom=$ENV{'user.domain'}; |
my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom)); |
my $plainname=&Apache::lonnet::escape( |
|
&Apache::loncommon::plainname($uname,$udom)); |
|
|
|
# graphics settings |
# graphics settings |
|
|
$iconpath = $r->dir_config('lonIconsURL') . "/"; |
$iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/"); |
|
|
my $now=time; |
|
|
|
# print screen |
|
$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() { |
if ($allowed) { |
var title=prompt('Listed Title for the Page'); |
$script .= &editing_js($udom,$uname); |
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(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
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('Remove "'+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(); |
|
} |
} |
} |
|
|
|
</script> |
|
|
|
ENDNEWSCRIPT |
|
} |
|
# -------------------------------------------------------------------- Body tag |
# -------------------------------------------------------------------- Body tag |
$r->print('</head>'. |
$script = '<script type="text/javascript">'."\n".$script."\n".'</script>'; |
&Apache::loncommon::bodytag('Course Documents','',$events, |
$r->print(&Apache::loncommon::start_page("$type Documents", $script, |
'','',$showdoc). |
{'force_register' => $showdoc,}). |
&Apache::loncommon::help_open_menu('','','','',273,'RAT')); |
&Apache::loncommon::help_open_menu('','',273,'RAT')); |
unless ($showdoc) { |
|
|
my %allfiles = (); |
|
my %codebase = (); |
|
my ($upload_result,$upload_output); |
|
if ($allowed) { |
|
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, |
|
\%codebase,$1); |
|
if ($upload_result eq 'phasetwo') { |
|
$r->print($upload_output); |
|
} |
|
} elsif ($env{'form.phasetwo'}) { |
|
my %newname = (); |
|
my %origname = (); |
|
my %attribs = (); |
|
my $updateflag = 0; |
|
my $residx = $env{'form.newidx'}; |
|
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} = &unescape($env{'form.embedded_orig_'.$i}); |
|
if (exists($env{'form.embedded_codebase_'.$i})) { |
|
$javacodebase = &unescape($env{'form.embedded_codebase_'.$i}); |
|
$origname{$i} =~ s#^\Q$javacodebase\E/##; |
|
} |
|
my @attributes = (); |
|
if ($env{'form.embedded_attrib_'.$i} =~ /:/) { |
|
@attributes = split/:/,$env{'form.embedded_attrib_'.$i}; |
|
} else { |
|
@attributes = ($env{'form.embedded_attrib_'.$i}); |
|
} |
|
foreach (@attributes) { |
|
push(@{$attribs{$i}},&unescape($_)); |
|
} |
|
if ($javacodebase) { |
|
$codebase{$i} = $javacodebase; |
|
$codebase{$i} =~ s#/$##; |
|
$updateflag = 1; |
|
} |
|
} |
|
unless ($newname{$i} eq $origname{$i}) { |
|
$updateflag = 1; |
|
} |
|
} |
|
# Process file upload - phase three - modify primary file |
|
if ($updateflag) { |
|
my ($content,$rtncode); |
|
my $updateflag = 0; |
|
my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode); |
|
if ($getstatus eq 'ok') { |
|
foreach my $item (keys %newname) { |
|
if ($newname{$item} ne $origname{$item}) { |
|
my $attrib_regexp = ''; |
|
if (@{$attribs{$item}} > 1) { |
|
$attrib_regexp = join('|',@{$attribs{$item}}); |
|
} else { |
|
$attrib_regexp = $attribs{$item}[0]; |
|
} |
|
if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) { |
|
} |
|
$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; #' stupid emacs |
|
} |
|
} |
|
# Save edited file. |
|
my $saveresult; |
|
my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult); |
|
} else { |
|
&Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus); |
|
} |
|
} |
|
} |
|
} |
|
|
|
unless ($showdoc || $upload_result eq 'phasetwo') { |
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'uplm' => 'Upload a new main course document', |
'uplm' => 'Upload a new main '.lc($type).' document', |
'upls' => 'Upload a new supplemental course document', |
'upls' => 'Upload a new supplemental '.lc($type).' document', |
'impp' => 'Import a published document', |
'impp' => 'Import a document', |
|
'pubd' => 'Published documents', |
|
'copm' => 'All documents out of a published map into this folder', |
'spec' => 'Special documents', |
'spec' => 'Special documents', |
'upld' => 'Upload Document', |
'upld' => 'Upload Document', |
'srch' => 'Search', |
'srch' => 'Search', |
'impo' => 'Import', |
'impo' => 'Import', |
|
'book' => 'Import Bookmarks', |
'selm' => 'Select Map', |
'selm' => 'Select Map', |
'load' => 'Load Map', |
'load' => 'Load Map', |
|
'reco' => 'Recover Deleted Resources', |
'newf' => 'New Folder', |
'newf' => 'New Folder', |
'newp' => 'New Composite Page', |
'newp' => 'New Composite Page', |
'extr' => 'External Resource', |
'extr' => 'External Resource', |
Line 2039 ENDNEWSCRIPT
|
Line 2627 ENDNEWSCRIPT
|
'navc' => 'Navigate Contents', |
'navc' => 'Navigate Contents', |
'sipa' => 'Simple Page', |
'sipa' => 'Simple Page', |
'sipr' => 'Simple Problem', |
'sipr' => 'Simple Problem', |
|
'drbx' => 'Drop Box', |
'scuf' => 'Score Upload Form', |
'scuf' => 'Score Upload Form', |
'bull' => 'Bulletin Board', |
'bull' => 'Bulletin Board', |
'mypi' => 'My Personal Info', |
'mypi' => 'My Personal Info', |
|
'grpo' => 'Group Files', |
'abou' => 'About User', |
'abou' => 'About User', |
'imsf' => 'Import IMS package', |
'imsf' => 'Import IMS package', |
'file' => 'File', |
'file' => 'File', |
'title' => 'Title', |
'title' => 'Title', |
'comment' => 'Comment' |
'comment' => 'Comment', |
|
'parse' => 'If HTML file, upload embedded images/multimedia files' |
); |
); |
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
if ($allowed) { |
if ($allowed) { |
Line 2055 ENDNEWSCRIPT
|
Line 2646 ENDNEWSCRIPT
|
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'vc' => 'Verify Content', |
'vc' => 'Verify Content', |
'cv' => 'Check/Set Resource Versions', |
'cv' => 'Check/Set Resource Versions', |
|
'ls' => 'List Symbs', |
|
'sl' => 'Show Log' |
); |
); |
|
|
my $folderpath=$ENV{'form.folderpath'}; |
my $folderpath=$env{'form.folderpath'}; |
if (!$folderpath) { |
if (!$folderpath) { |
if ($ENV{'form.folder'} eq '' || |
if ($env{'form.folder'} eq '' || |
$ENV{'form.folder'} eq 'supplemental') { |
$env{'form.folder'} eq 'supplemental') { |
$folderpath='default&'. |
$folderpath='default&'. |
&Apache::lonnet::escape(&mt('Main Course Documents')); |
&escape(&mt('Main '.$type.' Documents')); |
} |
} |
} |
} |
unless ($ENV{'form.pagepath'}) { |
unless ($env{'form.pagepath'}) { |
$containertag = '<input type="hidden" name="folderpath" value="" />'; |
$containertag = '<input type="hidden" name="folderpath" value="" />'; |
$uploadtag = '<input type="hidden" name="folderpath" value="'.$folderpath.'" />'; |
$uploadtag = '<input type="hidden" name="folderpath" value="'.$folderpath.'" />'; |
} |
} |
Line 2074 ENDNEWSCRIPT
|
Line 2667 ENDNEWSCRIPT
|
<form name="renameform" method="post" action="/adm/coursedocs"> |
<form name="renameform" method="post" action="/adm/coursedocs"> |
<input type="hidden" name="title" /> |
<input type="hidden" name="title" /> |
<input type="hidden" name="cmd" /> |
<input type="hidden" name="cmd" /> |
|
<input type="hidden" name="markcopy" /> |
$containertag |
$containertag |
</form> |
</form> |
<form name="simpleedit" method="post" action="/adm/coursedocs"> |
<form name="simpleedit" method="post" action="/adm/coursedocs"> |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
$uploadtag |
$uploadtag |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="courseverify"> |
<form action="/adm/coursedocs" method="post" name="courseverify"> |
Line 2088 $uploadtag
|
Line 2682 $uploadtag
|
<input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'} |
<input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'} |
$dumpbut |
$dumpbut |
$exportbut |
$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> |
</td></tr></table> |
</form> |
</form> |
ENDCOURSEVERIFY |
ENDCOURSEVERIFY |
$r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc', |
$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 |
# --------------------------------------------------------- Standard documents |
$r->print('<table border=2 cellspacing=4 cellpadding=4>'); |
$r->print('<table border=2 cellspacing=4 cellpadding=4>'); |
Line 2100 ENDCOURSEVERIFY
|
Line 2699 ENDCOURSEVERIFY
|
$r->print('<tr><td bgcolor="#BBBBBB">'); |
$r->print('<tr><td bgcolor="#BBBBBB">'); |
# '<h2>'.&mt('Main Course Documents'). |
# '<h2>'.&mt('Main Course Documents'). |
# ($allowed?' '.$help{'Main_Course_Documents'}:'').'</h2>'); |
# ($allowed?' '.$help{'Main_Course_Documents'}:'').'</h2>'); |
my $folder=$ENV{'form.folder'}; |
my $folder=$env{'form.folder'}; |
if ($folder eq '' || $folder eq 'supplemental') { |
if ($folder eq '' || $folder eq 'supplemental') { |
$folder='default'; |
$folder='default'; |
$ENV{'form.folderpath'}='default&'.&Apache::lonnet::escape(&mt('Main Course Documents')); |
$env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents')); |
} |
} |
my $postexec=''; |
my $postexec=''; |
if ($folder eq 'default') { |
if ($folder eq 'default') { |
Line 2112 ENDCOURSEVERIFY
|
Line 2711 ENDCOURSEVERIFY
|
#$postexec='self.close();'; |
#$postexec='self.close();'; |
} |
} |
$hadchanges=0; |
$hadchanges=0; |
&editor($r,$coursenum,$coursedom,$folder,$allowed); |
&editor($r,$coursenum,$coursedom,$folder,$allowed,$upload_output); |
if ($hadchanges) { |
if ($hadchanges) { |
&mark_hash_old() |
&mark_hash_old() |
} |
} |
Line 2121 ENDCOURSEVERIFY
|
Line 2720 ENDCOURSEVERIFY
|
'.sequence'; |
'.sequence'; |
my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. |
my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. |
'.page'; |
'.page'; |
|
my $container='sequence'; |
|
if ($env{'form.pagepath'}) { |
|
$container='page'; |
|
} |
|
my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container; |
$r->print(<<ENDFORM); |
$r->print(<<ENDFORM); |
<table cellspacing=4 cellpadding=4><tr> |
<table cellspacing=4 cellpadding=4><tr> |
<th bgcolor="#DDDDDD">$lt{'uplm'}</th> |
<th bgcolor="#DDDDDD">$lt{'uplm'}</th> |
Line 2130 ENDCOURSEVERIFY
|
Line 2733 ENDCOURSEVERIFY
|
</tr> |
</tr> |
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
$lt{'file'}:<br /> |
$lt{'file'}:<br /> |
<form action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<input type="file" name="uploaddoc" size="40"> |
<input type="file" name="uploaddoc" size="40"> |
<br /> |
<br /> |
$lt{'title'}:<br /> |
$lt{'title'}:<br /> |
<input type="text" size="50" name="comment"> |
<input type="text" size="50" name="comment"> |
$uploadtag |
$uploadtag |
<input type="hidden" name="cmd" value="upload_default"> |
<input type="hidden" name="cmd" value="upload_default"> |
|
<br /> |
|
<nobr> |
|
<label>$lt{'parse'}? |
|
<input type="checkbox" name="parserflag" /> |
|
</label> |
|
</nobr> |
|
<br /> |
|
<br /> |
<nobr> |
<nobr> |
<input type="submit" value="$lt{'upld'}"> |
<input type="submit" value="$lt{'upld'}"> |
$help{'Uploading_From_Harddrive'} |
$help{'Uploading_From_Harddrive'} |
Line 2145 $uploadtag
|
Line 2756 $uploadtag
|
</td> |
</td> |
<td bgcolor="#DDDDDD"> |
<td bgcolor="#DDDDDD"> |
<form action="/adm/coursedocs" method="post" name="simpleeditdefault"> |
<form action="/adm/coursedocs" method="post" name="simpleeditdefault"> |
|
$lt{'pubd'}<br /> |
$uploadtag |
$uploadtag |
<input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}"> |
<input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}" /> |
|
<br /> |
<nobr> |
<nobr> |
<input type=button onClick="javascript:groupimport();" value="$lt{'impo'}"> |
<input type=button onClick="javascript:groupimport();" value="$lt{'impo'}" /> |
$help{'Importing_LON-CAPA_Resource'} |
$help{'Importing_LON-CAPA_Resource'} |
</nobr> |
</nobr> |
|
<br /> |
|
<input type=button onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" /> |
<p> |
<p> |
<hr /> |
<hr /> |
<input type="text" size="20" name="importmap"><br /> |
$lt{'copm'}<br /> |
|
<input type="text" size="40" name="importmap"><br /> |
<nobr><input type=button |
<nobr><input type=button |
onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')" |
onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')" |
value="$lt{'selm'}"> <input type="submit" name="loadmap" value="$lt{'load'}"> |
value="$lt{'selm'}"> <input type="submit" name="loadmap" value="$lt{'load'}"> |
$help{'Load_Map'}</nobr> |
$help{'Load_Map'}</nobr> |
</p> |
</p> |
</form> |
</form> |
</td> |
<hr /> |
<td bgcolor="#DDDDDD"> |
<form action="/adm/groupsort" method="post" name="recover"> |
|
<input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1,0)" value="$lt{'reco'}" /> |
|
</form> |
ENDFORM |
ENDFORM |
unless ($ENV{'form.pagepath'}) { |
unless ($env{'form.pagepath'}) { |
|
$r->print(<<ENDFORM); |
|
<hr /> |
|
<form action="/adm/coursedocs" method="post" name="newext"> |
|
$uploadtag |
|
<input type="hidden" name="importdetail" value="" /> |
|
<nobr> |
|
<input name="newext" type="button" onClick="javascript:makenewext('newext');" |
|
value="$lt{'extr'}" /> $help{'Adding_External_Resource'} |
|
</nobr> |
|
</form> |
|
<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> |
|
</form> |
|
ENDFORM |
|
} |
|
$r->print('</td><td bgcolor="#DDDDDD">'); |
|
unless ($env{'form.pagepath'}) { |
$r->print(<<ENDFORM); |
$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="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newfolder" type="button" |
<input name="newfolder" type="button" |
onClick="javascript:makenewfolder(this.form,'$folderseq');" |
onClick="javascript:makenewfolder(this.form,'$folderseq');" |
value="$lt{'newf'}" />$help{'Adding_Folders'} |
value="$lt{'newf'}" />$help{'Adding_Folders'} |
</nobr> |
</nobr> |
</form> |
</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="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newpage" type="button" |
<input name="newpage" type="button" |
onClick="javascript:makenewpage(this.form,'$pageseq');" |
onClick="javascript:makenewpage(this.form,'$pageseq');" |
value="$lt{'newp'}" />$help{'Adding_Pages'} |
value="$lt{'newp'}" />$help{'Adding_Pages'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newext"> |
<br /><form action="/adm/coursedocs" method="post" name="newsyl"> |
$uploadtag |
|
<input type=hidden name="importdetail" value=""> |
|
<nobr> |
|
<input name="newext" type="button" onClick="javascript:makenewext('newext');" |
|
value="$lt{'extr'}" /> $help{'Adding_External_Resource'} |
|
</nobr> |
|
</form> |
|
<form action="/adm/coursedocs" method="post" name="newsyl"> |
|
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" |
<input type="hidden" name="importdetail" |
value="Syllabus=/public/$coursedom/$coursenum/syllabus"> |
value="Syllabus=/public/$coursedom/$coursenum/syllabus" /> |
<nobr> |
<nobr> |
<input name="newsyl" type="submit" value="$lt{'syll'}" /> |
<input name="newsyl" type="submit" value="$lt{'syll'}" /> |
$help{'Syllabus'} |
$help{'Syllabus'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newnav"> |
<br /><form action="/adm/coursedocs" method="post" name="newnav"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" |
<input type="hidden" name="importdetail" |
value="Navigate Content=/adm/navmaps"> |
value="Navigate Content=/adm/navmaps" /> |
<nobr> |
<nobr> |
<input name="newnav" type="submit" value="$lt{'navc'}" /> |
<input name="newnav" type="submit" value="$lt{'navc'}" /> |
$help{'Navigate_Content'} |
$help{'Navigate_Content'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newsmppg"> |
<br /><form action="/adm/coursedocs" method="post" name="newsmppg"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newsmppg" type="button" value="$lt{'sipa'}" |
<input name="newsmppg" type="button" value="$lt{'sipa'}" |
onClick="javascript:makesmppage();" /> $help{'Simple Page'} |
onClick="javascript:makesmppage();" /> $help{'Simple Page'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newsmpproblem"> |
<br /><form action="/adm/coursedocs" method="post" name="newsmpproblem"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newsmpproblem" type="button" value="$lt{'sipr'}" |
<input name="newsmpproblem" type="button" value="$lt{'sipr'}" |
onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} |
onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} |
</nobr> |
</nobr> |
</form> |
</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 |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newexamupload" type="button" value="$lt{'scuf'}" |
<input name="newexamupload" type="button" value="$lt{'scuf'}" |
onClick="javascript:makeexamupload();" /> |
onClick="javascript:makeexamupload();" /> |
$help{'Score_Upload_Form'} |
$help{'Score_Upload_Form'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newbul"> |
<br /><form action="/adm/coursedocs" method="post" name="newbul"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newbulletin" type="button" value="$lt{'bull'}" |
<input name="newbulletin" type="button" value="$lt{'bull'}" |
onClick="javascript:makebulboard();" /> |
onClick="javascript:makebulboard();" /> |
$help{'Bulletin Board'} |
$help{'Bulletin Board'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newaboutme"> |
<br /><form action="/adm/coursedocs" method="post" name="newaboutme"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" |
<input type="hidden" name="importdetail" |
value="$plainname=/adm/$udom/$uname/aboutme"> |
value="$plainname=/adm/$udom/$uname/aboutme" /> |
<nobr> |
<nobr> |
<input name="newaboutme" type="submit" value="$lt{'mypi'}" /> |
<input name="newaboutme" type="submit" value="$lt{'mypi'}" /> |
$help{'My Personal Info'} |
$help{'My Personal Info'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newaboutsomeone"> |
<br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newaboutsomeone" type="button" value="$lt{'abou'}" |
<input name="newaboutsomeone" type="button" value="$lt{'abou'}" |
onClick="javascript:makeabout();" /> |
onClick="javascript:makeabout();" /> |
</nobr> |
</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 |
ENDFORM |
} |
} |
if ($ENV{'form.pagepath'}) { |
if ($env{'form.pagepath'}) { |
$r->print(<<ENDBLOCK); |
$r->print(<<ENDBLOCK); |
<form action="/adm/coursedocs" method="post" name="newsmpproblem"> |
<form action="/adm/coursedocs" method="post" name="newsmpproblem"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newsmpproblem" type="button" value="$lt{'sipr'}" |
<input name="newsmpproblem" type="button" value="$lt{'sipr'}" |
onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} |
onClick="javascript:makesmpproblem();" />$help{'Simple Problem'} |
</nobr> |
</nobr> |
</form> |
</form> |
<form action="/adm/coursedocs" method="post" name="newexamupload"> |
<br /><form action="/adm/coursedocs" method="post" name="newexamupload"> |
$uploadtag |
$uploadtag |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newexamupload" type="button" value="$lt{'scuf'}" |
<input name="newexamupload" type="button" value="$lt{'scuf'}" |
onClick="javascript:makeexamupload();" /> |
onClick="javascript:makeexamupload();" /> |
Line 2281 $help{'Score_Upload_Form'}
|
Line 2928 $help{'Score_Upload_Form'}
|
</nobr> |
</nobr> |
</form> |
</form> |
ENDBLOCK |
ENDBLOCK |
} else { |
|
$r->print(<<ENDFORM); |
|
</form> |
|
<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> |
|
</form> |
|
ENDFORM |
|
} |
} |
$r->print('</td></tr>'."\n". |
$r->print('</td></tr>'."\n". |
'</table>'); |
'</table>'); |
Line 2300 ENDFORM
|
Line 2938 ENDFORM
|
$r->print('<tr><td bgcolor="#BBBBBB">'); |
$r->print('<tr><td bgcolor="#BBBBBB">'); |
# '<h2>'.&mt('Supplemental Course Documents'). |
# '<h2>'.&mt('Supplemental Course Documents'). |
# ($allowed?' '.$help{'Supplemental'}:'').'</h2>'); |
# ($allowed?' '.$help{'Supplemental'}:'').'</h2>'); |
my $folder=$ENV{'form.folder'}; |
my $folder=$env{'form.folder'}; |
unless ($folder=~/^supplemental/) { |
unless ($folder=~/^supplemental/) { |
$folder='supplemental'; |
$folder='supplemental'; |
} |
} |
if ($folder =~ /^supplemental$/ && |
if ($folder =~ /^supplemental$/ && |
$ENV{'form.folderpath'} =~ /^default\&/) { |
$env{'form.folderpath'} =~ /^default\&/) { |
$ENV{'form.folderpath'}='supplemental&'. |
$env{'form.folderpath'}='supplemental&'. |
&Apache::lonnet::escape(&mt('Supplemental Course Documents')); |
&escape(&mt('Supplemental '.$type.' Documents')); |
} |
} |
&editor($r,$coursenum,$coursedom,$folder,$allowed); |
&editor($r,$coursenum,$coursedom,$folder,$allowed); |
if ($allowed) { |
if ($allowed) { |
Line 2323 ENDFORM
|
Line 2961 ENDFORM
|
<tr><td bgcolor="#DDDDDD"> |
<tr><td bgcolor="#DDDDDD"> |
<form action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<form action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<input type="file" name="uploaddoc" size="40"> |
<input type="file" name="uploaddoc" size="40"> |
<br />$lt{'comment'}:<br /> |
<br /> |
|
<br /> |
|
<nobr> |
|
<label>$lt{'parse'}? |
|
<input type="checkbox" name="parserflag" /> |
|
</label> |
|
</nobr> |
|
<br /><br /> |
|
$lt{'comment'}:<br /> |
<textarea cols=50 rows=4 name='comment'> |
<textarea cols=50 rows=4 name='comment'> |
</textarea> |
</textarea> |
<br /> |
<br /> |
<input type="hidden" name="folderpath" value="$ENV{'form.folderpath'}" /> |
<input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> |
<input type="hidden" name="cmd" value="upload_supplemental"> |
<input type="hidden" name="cmd" value="upload_supplemental"> |
<nobr> |
<nobr> |
<input type="submit" value="$lt{'upld'}"> |
<input type="submit" value="$lt{'upld'}"> |
Line 2337 ENDFORM
|
Line 2983 ENDFORM
|
</td> |
</td> |
<td bgcolor="#DDDDDD"> |
<td bgcolor="#DDDDDD"> |
<form action="/adm/coursedocs" method="post" name="supnewfolder"> |
<form action="/adm/coursedocs" method="post" name="supnewfolder"> |
<input type="hidden" name="folderpath" value="$ENV{'form.folderpath'}" /> |
<input type="hidden" name="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newfolder" type="button" |
<input name="newfolder" type="button" |
onClick="javascript:makenewfolder(this.form,'$folderseq');" |
onClick="javascript:makenewfolder(this.form,'$folderseq');" |
value="$lt{'newf'}" /> $help{'Adding_Folders'} |
value="$lt{'newf'}" /> $help{'Adding_Folders'} |
</nobr> |
</nobr> |
</form> |
</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="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" value=""> |
<input type="hidden" name="importdetail" value="" /> |
<nobr> |
<nobr> |
<input name="newext" type="button" |
<input name="newext" type="button" |
onClick="javascript:makenewext('supnewext');" |
onClick="javascript:makenewext('supnewext');" |
value="$lt{'extr'}" /> $help{'Adding_External_Resource'} |
value="$lt{'extr'}" /> $help{'Adding_External_Resource'} |
</nobr> |
</nobr> |
</form> |
</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="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" |
<input type="hidden" name="importdetail" |
value="Syllabus=/public/$coursedom/$coursenum/syllabus"> |
value="Syllabus=/public/$coursedom/$coursenum/syllabus" /> |
<nobr> |
<nobr> |
<input name="newsyl" type="submit" value="$lt{'syll'}" /> |
<input name="newsyl" type="submit" value="$lt{'syll'}" /> |
$help{'Syllabus'} |
$help{'Syllabus'} |
</nobr> |
</nobr> |
</form> |
</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="folderpath" value="$env{'form.folderpath'}" /> |
<input type=hidden name="importdetail" |
<input type="hidden" name="importdetail" |
value="$plainname=/adm/$udom/$uname/aboutme"> |
value="$plainname=/adm/$udom/$uname/aboutme" /> |
<nobr> |
<nobr> |
<input name="newaboutme" type="submit" value="$lt{'mypi'}" /> |
<input name="newaboutme" type="submit" value="$lt{'mypi'}" /> |
$help{'My Personal Info'} |
$help{'My Personal Info'} |
Line 2378 ENDSUPFORM
|
Line 3024 ENDSUPFORM
|
} |
} |
} |
} |
if ($allowed) { |
if ($allowed) { |
$r->print('<form name="extimport"><input type="hidden" name="title"><input type="hidden" name="url"><input type="hidden" name="useform"></form>'); |
$r->print('<form method="POST" name="extimport" action="/adm/coursedocs"><input type="hidden" name="title" /><input type="hidden" name="url" /><input type="hidden" name="useform" /></form>'); |
} |
} |
$r->print('</table>'); |
$r->print('</table>'); |
} else { |
} else { |
|
unless ($upload_result eq 'phasetwo') { |
# -------------------------------------------------------- This is showdoc mode |
# -------------------------------------------------------- This is showdoc mode |
$r->print("<h1>".&mt('Uploaded Document').' - '. |
$r->print("<h1>".&mt('Uploaded Document').' - '. |
&Apache::lonnet::gettitle($r->uri).'</h1><p>'. |
&Apache::lonnet::gettitle($r->uri).'</h1><p>'. |
&mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>". |
&mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>". |
&entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>'); |
&entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>'); |
|
} |
} |
} |
} |
} |
$r->print('</body></html>'); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
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=escape(foldername)+"="+folderseq; |
|
targetform.submit(); |
|
} |
|
} |
|
|
|
function makenewpage(targetform,folderseq) { |
|
var pagename=prompt('Name of New Page','New Page'); |
|
if (pagename) { |
|
targetform.importdetail.value=escape(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= |
|
escape(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= |
|
escape(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= |
|
escape(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= |
|
escape(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= |
|
escape(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 '+escape(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; |
1; |
__END__ |
__END__ |