version 1.158, 2004/12/23 14:00:58
|
version 1.166, 2005/02/02 22:15:06
|
Line 132 sub dumpbutton {
|
Line 132 sub dumpbutton {
|
} |
} |
} |
} |
|
|
|
sub clean { |
|
my ($title)=@_; |
|
$title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; |
|
return $title; |
|
} |
# -------------------------------------------------------- Actually dump course |
# -------------------------------------------------------- Actually dump course |
|
|
sub dumpcourse { |
sub dumpcourse { |
Line 149 sub dumpcourse {
|
Line 154 sub dumpcourse {
|
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\_(.+)/) { |
Line 160 sub dumpcourse {
|
Line 165 sub dumpcourse {
|
$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=&clean($newfilename); |
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 214 sub dumpcourse {
|
Line 219 sub dumpcourse {
|
} |
} |
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>'); |
Line 223 sub dumpcourse {
|
Line 228 sub dumpcourse {
|
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'}.'/'.$_}}; |
|
$title=~s/:/:/g; |
$r->print('<td>'.($title?$title:' ').'</td>'); |
$r->print('<td>'.($title?$title:' ').'</td>'); |
unless ($title) { |
unless ($title) { |
$title=$_; |
$title=$_; |
} |
} |
$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"); |
} |
} |
Line 242 sub dumpcourse {
|
Line 248 sub dumpcourse {
|
# ------------------------------------------------------ Generate "export" button |
# ------------------------------------------------------ Generate "export" button |
|
|
sub exportbutton { |
sub exportbutton { |
|
return ''; |
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 Course to IMS').'" />'. |
Line 486 sub create_ims_store {
|
Line 493 sub create_ims_store {
|
if (!-e $$tempexport) { |
if (!-e $$tempexport) { |
mkdir($$tempexport,0700); |
mkdir($$tempexport,0700); |
} |
} |
|
if (!-e "$$tempexport/resources") { |
|
mkdir("$$tempexport/resources",0700); |
|
} |
# open manifest file |
# open manifest file |
my $manifest = '/imsmanifest.xml'; |
my $manifest = '/imsmanifest.xml'; |
my $manifestfilename = $$tempexport.$manifest; |
my $manifestfilename = $$tempexport.$manifest; |
Line 609 sub build_package {
|
Line 619 sub build_package {
|
} |
} |
my %extras = ( |
my %extras = ( |
caller => 'imsexport', |
caller => 'imsexport', |
tempexport => $tempexport, |
tempexport => $tempexport.'/resources', |
count => $count |
count => $count |
); |
); |
my $discresult = &Apache::lonfeedback::list_discussion($mode,undef,$ressymb,\%extras); |
my $discresult = &Apache::lonfeedback::list_discussion($mode,undef,$ressymb,\%extras); |
Line 655 sub process_content {
|
Line 665 sub process_content {
|
my $content_type; |
my $content_type; |
my $message; |
my $message; |
# find where user is author or co-author |
# 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 702 sub process_content {
|
Line 711 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; |
|
} |
|
} |
} |
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) { |
my $uploadmsg = ''; |
my $uploadmsg = ''; |
&replicate_content($cdom,$cnum,$tempexport,$item,$count,\$uploadmsg,$href,'uploaded'); |
&replicate_content($cdom,$cnum,$tempexport,$item,$count,\$uploadmsg,$href,'templateupload'); |
if ($uploadmsg) { |
if ($uploadmsg) { |
$$copyresult .= $uploadmsg."\n"; |
$$copyresult .= $uploadmsg."\n"; |
} |
} |
Line 742 sub process_content {
|
Line 742 sub process_content {
|
|
|
sub replicate_content { |
sub replicate_content { |
my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_; |
my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_; |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
my ($map,$ind,$url); |
my $feedurl = &Apache::lonnet::clutter($url); |
if ($caller eq 'templateupload') { |
|
$url = $symb; |
|
$url =~ s#//#/#g; |
|
} else { |
|
($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
} |
my $content; |
my $content; |
my $filename; |
my $filename; |
my $repstatus; |
my $repstatus; |
Line 762 sub replicate_content {
|
Line 766 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); |
$content = &Apache::lonnet::getfile('/home/httpd/html/res/'.$url); |
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($content,$count,$tempexport,$href,'resource'); |
$repstatus = 'ok'; |
$repstatus = 'ok'; |
} |
} |
} elsif ($caller eq 'noedit' || $caller eq 'uploaded') { |
} 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') { |
Line 779 sub replicate_content {
|
Line 783 sub replicate_content {
|
} else { |
} else { |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
$$message = 'Could not render '.$url.' server message - '.$rtncode; |
} |
} |
|
} 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; |
Line 788 sub replicate_content {
|
Line 796 sub replicate_content {
|
$$message = 'Could not open destination file for '.$filename."\n"; |
$$message = 'Could not open destination file for '.$filename."\n"; |
} |
} |
} else { |
} else { |
$$message = 'Could not determine name of file for '.$url."\n"; |
$$message = 'Could not determine name of file for '.$symb."\n"; |
} |
} |
if ($repstatus eq 'ok') { |
if ($repstatus eq 'ok') { |
$content_name = $count.'/'.$filename; |
$content_name = $count.'/'.$filename; |
Line 808 sub extract_media {
|
Line 816 sub extract_media {
|
sub store_template { |
sub store_template { |
my ($contents,$tempexport,$count,$content_type) = @_; |
my ($contents,$tempexport,$count,$content_type) = @_; |
if ($contents) { |
if ($contents) { |
my $destination = $tempexport.'/resources/'.$count.'/'.$content_type.'.xml'; |
if ($tempexport) { |
my $storetemplate; |
if (!-e $tempexport.'/resources') { |
if ($storetemplate = Apache::File->new('>'.$destination)) { |
mkdir($tempexport.'/resources',0700); |
print $storetemplate $contents; |
} |
close($storetemplate); |
if (!-e $tempexport.'/resources/'.$count) { |
|
mkdir($tempexport.'/resources/'.$count,0700); |
|
} |
|
my $destination = $tempexport.'/resources/'.$count.'/'.$content_type.'.xml'; |
|
my $storetemplate; |
|
if ($storetemplate = Apache::File->new('>'.$destination)) { |
|
print $storetemplate $contents; |
|
close($storetemplate); |
|
} |
|
if ($content_type eq 'external') { |
|
return $count.'/'.$content_type.'.html'; |
|
} else { |
|
return $count.'/'.$content_type.'.xml'; |
|
} |
} |
} |
return $count.'/'.$content_type.'.xml'; |
|
} |
} |
} |
} |
|
|
Line 986 sub editor {
|
Line 1006 sub editor {
|
if ( ($folder=~/^$1/) || ($1 eq 'default') ) { |
if ( ($folder=~/^$1/) || ($1 eq 'default') ) { |
# this is for a course, not a user, so set coursedoc flag |
# this is for a course, not a user, so set coursedoc flag |
# probably the only place in the system where this should be "1" |
# probably the only place in the system where this should be "1" |
my $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs'); |
my $newidx=$#Apache::lonratedt::resources+1; |
|
my $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs/'.$newidx); |
my $ext='false'; |
my $ext='false'; |
if ($url=~/^http\:\/\//) { $ext='true'; } |
if ($url=~/^http\:\/\//) { $ext='true'; } |
$url=~s/\:/\:/g; |
$url=~s/\:/\:/g; |
Line 998 sub editor {
|
Line 1019 sub editor {
|
$comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'. |
$comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'. |
$ENV{'user.domain'}.'___&&&___'.$comment; |
$ENV{'user.domain'}.'___&&&___'.$comment; |
} |
} |
my $newidx=$#Apache::lonratedt::resources+1; |
|
$Apache::lonratedt::resources[$newidx]= |
$Apache::lonratedt::resources[$newidx]= |
$comment.':'.$url.':'.$ext.':normal:res'; |
$comment.':'.$url.':'.$ext.':normal:res'; |
$Apache::lonratedt::order[$#Apache::lonratedt::order+1]= |
$Apache::lonratedt::order[$#Apache::lonratedt::order+1]= |
Line 1283 END
|
Line 1303 END
|
$folderpath.=$folderarg.'&'.$foldername; |
$folderpath.=$folderarg.'&'.$foldername; |
$url.='folderpath='.&Apache::lonnet::escape($folderpath); |
$url.='folderpath='.&Apache::lonnet::escape($folderpath); |
$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.submit()" name="randpick_'.$orderidx.'" value="'. |
(&Apache::lonratedt::getparameter($orderidx, |
(&Apache::lonratedt::getparameter($orderidx, |
'parameter_randompick'))[0]. |
'parameter_randompick'))[0]. |
'" />'.'</label>'; |
'" />'. |
|
'<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>'; |
|
|
} |
} |
if ($ispage) { |
if ($ispage) { |
Line 1313 END
|
Line 1334 END
|
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"':''); |
((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':''); |
my $hidtext= |
my $hidtext= |
((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); |
((&Apache::lonratedt::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.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.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 1940 function makeabout() {
|
Line 1957 function makeabout() {
|
this.document.forms.newaboutsomeone.importdetail.value= |
this.document.forms.newaboutsomeone.importdetail.value= |
'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme'; |
'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme'; |
this.document.forms.newaboutsomeone.submit(); |
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() { |
function makeims() { |
var caller = document.forms.ims.folder.value |
var caller = document.forms.ims.folder.value; |
var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one" |
var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one"; |
newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes") |
newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes"); |
newWindow.location.href = newlocation |
newWindow.location.href = newlocation; |
} |
} |
|
|
|
|