version 1.705, 2023/09/27 14:52:26
|
version 1.712, 2024/12/20 15:15:04
|
Line 102 sub authorhosts {
|
Line 102 sub authorhosts {
|
my %outhash=(); |
my %outhash=(); |
my $home=0; |
my $home=0; |
my $other=0; |
my $other=0; |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
foreach my $key (keys(%env)) { |
foreach my $key (keys(%env)) { |
if ($key=~/^user\.role\.(au|ca)\.(.+)$/) { |
if ($key=~/^user\.role\.(au|ca)\.(.+)$/) { |
my $role=$1; |
my $role=$1; |
Line 118 sub authorhosts {
|
Line 119 sub authorhosts {
|
} |
} |
my $allowed=0; |
my $allowed=0; |
my $myhome=&Apache::lonnet::homeserver($ca,$cd); |
my $myhome=&Apache::lonnet::homeserver($ca,$cd); |
my @ids=&Apache::lonnet::current_machine_ids(); |
|
foreach my $id (@ids) { |
foreach my $id (@ids) { |
if ($id eq $myhome) { |
if ($id eq $myhome) { |
$allowed=1; |
$allowed=1; |
Line 263 ENDJS
|
Line 263 ENDJS
|
add_entries => {'onload' => "hide_searching();"}, |
add_entries => {'onload' => "hide_searching();"}, |
}; |
}; |
} |
} |
$r->print(&Apache::loncommon::start_page('Copy '.$crstype.' Content to Authoring Space',$js,$starthash)."\n". |
$r->print(&Apache::loncommon::start_page('Copy uploaded content to Authoring Space',$js,$starthash)."\n". |
&Apache::lonhtmlcommon::breadcrumbs('Copy '.$crstype.' Content to Authoring Space')."\n"); |
&Apache::lonhtmlcommon::breadcrumbs('Copy uploaded content to Authoring Space')."\n"); |
$r->print(&startContentScreen('tools')); |
$r->print(&startContentScreen('tools')); |
my ($home,$other,%outhash)=&authorhosts(); |
my ($home,$other,%outhash)=&authorhosts(); |
unless ($home) { |
unless ($home) { |
|
$r->print('<p class="LC_info">'.&mt('No author or co-author roles on this server.').'</p>'); |
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
return ''; |
return ''; |
} |
} |
Line 276 ENDJS
|
Line 277 ENDJS
|
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'}}) { |
unless ($outhash{'home_'.$env{'form.authorspace'}}) { |
$r->print(&endContentScreen()); |
$r->print('<p class="LC_info">'.&mt('Selected Authoring Space is not on this server.').'</p>'. |
|
&endContentScreen()); |
return ''; |
return ''; |
} |
} |
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
Line 572 $contents{webreferences}.'
|
Line 574 $contents{webreferences}.'
|
if (!ref($navmap)) { |
if (!ref($navmap)) { |
$r->print($errormsg); |
$r->print($errormsg); |
} else { |
} else { |
$r->print('<div id="searching">'.&mt('Searching ...').'</div>'); |
|
$r->rflush(); |
|
my ($preamble,$formname); |
|
$formname = 'dumpdoc'; |
|
unless ($home==1) { |
|
$preamble = '<div class="LC_left_float">'. |
|
'<fieldset><legend>'. |
|
&mt('Select the Authoring Space'). |
|
'</legend><select name="authorspace">'; |
|
} |
|
my @orderspaces = (); |
|
foreach my $key (sort(keys(%outhash))) { |
|
if ($key=~/^home_(.+)$/) { |
|
if ($1 eq $env{'user.name'}.':'.$env{'user.domain'}) { |
|
unshift(@orderspaces,$1); |
|
} else { |
|
push(@orderspaces,$1); |
|
} |
|
} |
|
} |
|
if ($home>1) { |
|
$preamble .= '<option value="" selected="selected">'.&mt('Select').'</option>'; |
|
} |
|
foreach my $user (@orderspaces) { |
|
if ($home==1) { |
|
$preamble .= '<input type="hidden" name="authorspace" value="'.$user.'" />'; |
|
} else { |
|
$preamble .= '<option value="'.$user.'">'.$user.' - '. |
|
&Apache::loncommon::plainname(split(/\:/,$user)).'</option>'; |
|
} |
|
} |
|
unless ($home==1) { |
|
$preamble .= '</select></fieldset></div>'."\n"; |
|
} |
|
my $title=$origcrsdata{'description'}; |
my $title=$origcrsdata{'description'}; |
$title=~s/[\/\s]+/\_/gs; |
$title=~s/[\/\s]+/\_/gs; |
$title=&clean($title); |
$title=&clean($title); |
$preamble .= '<div class="LC_left_float">'. |
my $formname = 'dumpdoc'; |
'<fieldset><legend>'.&mt('Folder in Authoring Space').'</legend>'. |
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash); |
'<input type="text" size="50" name="authorfolder" value="'. |
my %uploadedfiles; |
$title.'" />'. |
|
'</fieldset></div><div style="padding:0;clear:both;margin:0;border:0"></div>'."\n"; |
|
my %uploadedfiles; |
|
&tiehash(); |
&tiehash(); |
foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { |
foreach my $file (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { |
my ($ext)=($file=~/\.(\w+)$/); |
my ($ext)=($file=~/\.(\w+)$/); |
Line 640 $contents{webreferences}.'
|
Line 605 $contents{webreferences}.'
|
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
} |
} |
|
|
|
sub authorspace_selector { |
|
my ($r,$formname,$home,$title,%outhash) = @_; |
|
$r->print('<div id="searching">'.&mt('Searching ...').'</div>'."\n"); |
|
$r->rflush(); |
|
my $preamble; |
|
unless ($home==1) { |
|
$preamble = '<div class="LC_left_float">'. |
|
'<fieldset><legend>'. |
|
&mt('Select the Authoring Space'). |
|
'</legend><select name="authorspace">'; |
|
} |
|
my @orderspaces = (); |
|
foreach my $key (sort(keys(%outhash))) { |
|
if ($key=~/^home_(.+)$/) { |
|
if ($1 eq $env{'user.name'}.':'.$env{'user.domain'}) { |
|
unshift(@orderspaces,$1); |
|
} else { |
|
push(@orderspaces,$1); |
|
} |
|
} |
|
} |
|
if ($home>1) { |
|
$preamble .= '<option value="" selected="selected">'.&mt('Select').'</option>'; |
|
} |
|
foreach my $user (@orderspaces) { |
|
if ($home==1) { |
|
$preamble .= '<input type="hidden" name="authorspace" value="'.$user.'" />'; |
|
} else { |
|
$preamble .= '<option value="'.$user.'">'.$user.' - '. |
|
&Apache::loncommon::plainname(split(/\:/,$user)).'</option>'; |
|
} |
|
} |
|
unless ($home==1) { |
|
$preamble .= '</select></fieldset></div>'."\n"; |
|
} |
|
$preamble .= '<div class="LC_left_float">'. |
|
'<fieldset><legend>'.&mt('Folder in Authoring Space').'</legend>'. |
|
'<input type="text" size="50" name="authorfolder" value="'.$title.'" />'."\n". |
|
'</fieldset></div><div style="padding:0;clear:both;margin:0;border:0"></div>'."\n"; |
|
return $preamble; |
|
} |
|
|
sub recurse_html { |
sub recurse_html { |
my ($mm,$prefix,$currdirpath,$currurlpath,$container,$item,$replacehash,$deps) = @_; |
my ($mm,$prefix,$currdirpath,$currurlpath,$container,$item,$replacehash,$deps) = @_; |
return unless ((ref($replacehash) eq 'HASH') && (ref($deps) eq 'HASH')); |
return unless ((ref($replacehash) eq 'HASH') && (ref($deps) eq 'HASH')); |
Line 684 sub recurse_html {
|
Line 691 sub recurse_html {
|
return; |
return; |
} |
} |
|
|
|
sub copycrsauthored { |
|
my ($r,$coursenum,$coursedom,$coursehome,$readonly) = @_; |
|
my ($starthash,$js); |
|
unless (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
|
$js = <<"ENDJS"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function hide_searching() { |
|
if (document.getElementById('searching')) { |
|
document.getElementById('searching').style.display = 'none'; |
|
} |
|
return; |
|
} |
|
|
|
// ]]> |
|
</script> |
|
ENDJS |
|
$starthash = { |
|
add_entries => {'onload' => "hide_searching();"}, |
|
}; |
|
} |
|
$r->print(&Apache::loncommon::start_page('Copy from Course Authoring to User Authoring',$js,$starthash)."\n". |
|
&Apache::lonhtmlcommon::breadcrumbs('Copy from Course Authoring Space')."\n"); |
|
$r->print(&startContentScreen('tools')); |
|
my ($home,$other,%outhash)=&authorhosts(); |
|
unless ($home) { |
|
$r->print('<p class="LC_info">'.&mt('No author or co-author roles on this server.').'</p>'); |
|
$r->print(&endContentScreen()); |
|
return ''; |
|
} |
|
my %origcrsdata=&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
my $exclude = &Apache::lonnet::priv_exclude(); |
|
my $srcurl = "/priv/$coursedom/$coursenum"; |
|
my $srctop = $r->dir_config('lonDocRoot').$srcurl; |
|
if (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { |
|
$r->print('<h3>'.&mt('Copying Files and/or Sub-directories').'</h3>'); |
|
if ($readonly) { |
|
$r->print('<p class="LC_info">'. |
|
&mt('You do not have permission to copy files and/or directories from Course Authoring Space.'). |
|
'</p>'. |
|
&endContentScreen()); |
|
return ''; |
|
} |
|
unless ($outhash{'home_'.$env{'form.authorspace'}}) { |
|
$r->print('<p class="LC_info">'.&mt('Selected Authoring Space is not on this server.').'</p>'. |
|
&endContentScreen()); |
|
return ''; |
|
} |
|
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
|
my $desturl = "/priv/$cd/$ca"; |
|
my $desttop = $r->dir_config('lonDocRoot').$desturl; |
|
my $subdir = &clean($env{'form.authorfolder'}); |
|
$subdir = &cleandir($subdir); |
|
if ($subdir eq '') { |
|
$r->print('<p class="LC_info">'.&mt('After removal of disallowed characters target sub-directory name was blank.').'</p>'. |
|
&endContentScreen()); |
|
return ''; |
|
} elsif ($subdir =~/^_+$/) { |
|
$r->print('<p class="LC_info">'.&mt('After replacement of non-alphanumeric characters with _ in target sub-directory name, nothing but underscores was left.').'</p>'. |
|
&endContentScreen()); |
|
return ''; |
|
} |
|
my $is_course_home; |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
if (($coursehome ne '') && (grep(/^\Q$coursehome\E$/,@ids))) { |
|
$is_course_home = 1; |
|
} |
|
my (%tocopy,%dirs_to_make,%files_to_copy); |
|
map { $tocopy{&unescape($_)} = 1; } &Apache::loncommon::get_env_multiple('form.copytouser'); |
|
if (keys(%tocopy)) { |
|
my (%subdirs,%files); |
|
&Apache::lonnet::recursedirs($home,1,undef,$exclude,0,0,$srcurl,'',\%subdirs,\%files); |
|
foreach my $possible (sort(keys(%tocopy))) { |
|
if ($possible =~ m{/$}) { |
|
my $possdir = $possible; |
|
$possdir =~ s{^/+|/+$}{}g; |
|
if (exists($subdirs{$possdir})) { |
|
$dirs_to_make{$possdir} = 1; |
|
} else { |
|
delete($tocopy{$possible}); |
|
} |
|
} else { |
|
my ($path,$fname) = ($possible =~ m{(.*/)([^/]+)$}); |
|
my $found = 0; |
|
if ($path eq '/') { |
|
if (ref($files{$path}) eq 'HASH') { |
|
if (exists($files{$path}{$fname})) { |
|
$found = 1; |
|
$files_to_copy{$fname} = 1; |
|
} |
|
} |
|
} else { |
|
$path =~ s{^/+|/+$}{}g; |
|
if (ref($files{$path}) eq 'HASH') { |
|
if (exists($files{$path}{$fname})) { |
|
$dirs_to_make{$path} = 1; |
|
$files_to_copy{"$path/$fname"} = 1; |
|
$found = 1; |
|
} |
|
} |
|
} |
|
unless ($found) { |
|
delete($tocopy{$possible}); |
|
} |
|
} |
|
} |
|
} else { |
|
$r->print('<p>'.&mt('No files or directories selected for copying').'</p>'); |
|
$r->print(&endContentScreen()); |
|
return ''; |
|
} |
|
if (keys(%tocopy)) { |
|
my $mm = new File::MMagic; |
|
my ($notopdir,%newdir,%newfile); |
|
$r->print('<p>'.&mt('Copy to: [_1]', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'</span>'). |
|
'</p>'."\n"); |
|
unless ($is_course_home) { |
|
$r->print('<p class="LC_info>'.&mt("Session needs to be hosted on course's home server."). |
|
'</p>'. |
|
&endContentScreen()); |
|
return ''; |
|
} |
|
if (keys(%dirs_to_make)) { |
|
if ($is_course_home) { |
|
unless (-e $desttop.'/'.$subdir) { |
|
mkdir($desttop.'/'.$subdir,0755); |
|
} |
|
if (-e $desttop.'/'.$subdir) { |
|
foreach my $dir (sort(keys(%dirs_to_make))) { |
|
my @dirs=split(/\//,$dir); |
|
my $path="$desttop/$subdir"; |
|
my $makepath=$path; |
|
my $fail; |
|
for (my $i=0;$i<@dirs;$i++) { |
|
$makepath.='/'.$dirs[$i]; |
|
unless (-e $makepath) { |
|
unless (mkdir($makepath,0755)) { |
|
$fail = 1; |
|
last; |
|
} |
|
if (($i == scalar(@dirs)-1) && (!$fail)) { |
|
$newdir{$dir} = 1; |
|
} |
|
} |
|
} |
|
if ($fail) { |
|
$r->print('<p class="LC_warning">'.&mt('Target directory: [_1] does not exist, and could not be created.', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'/'.$dir.'</span>'). |
|
'</p>'."\n"); |
|
} |
|
} |
|
} else { |
|
$notopdir = 1; |
|
} |
|
} |
|
} |
|
if (keys(%files_to_copy)) { |
|
if ($is_course_home) { |
|
unless (-e $desttop.'/'.$subdir) { |
|
mkdir($desttop.'/'.$subdir,0755); |
|
} |
|
if (-e $desttop.'/'.$subdir) { |
|
my $num = 0; |
|
foreach my $file (keys(%files_to_copy)) { |
|
my ($fail,$dup,$dir_is_file,$src,$dest,$path,$fname); |
|
if ($file =~ m{/}) { |
|
($path,$fname) = ($file =~ m{^(.+)/([^/]+)$}); |
|
if (-d "$desttop/$subdir/$path") { |
|
if (-e "$desttop/$subdir/$path/$fname") { |
|
$dup = 1; |
|
} else { |
|
$src = "$srctop/$path/$fname"; |
|
$dest = "$desttop/$subdir/$path/$fname"; |
|
} |
|
} elsif (-f "$desttop/$subdir/$path") { |
|
$dir_is_file = 1; |
|
} else { |
|
$fail = 1; |
|
} |
|
} elsif (-e "$desttop/$subdir/$file") { |
|
$dup = 1; |
|
} else { |
|
$src = "$srctop/$file"; |
|
$dest = "$desttop/$subdir/$file"; |
|
$fname = $file; |
|
} |
|
if ($fail) { |
|
$r->print('<p class="LC_warning">'.&mt('Target directory: [_1] does not exist, and could not be created.', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'/'.$path.'</span>'). |
|
'</p>'."\n"); |
|
} elsif ($dup) { |
|
$r->print('<p class="LC_warning">'.&mt('Target file: [_1] already exists -- not overwriting.', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'/'.$file.'</span>'). |
|
'</p>'."\n"); |
|
} elsif ($dir_is_file) { |
|
$r->print('<p class="LC_warning">'.&mt('Target directory: [_1] name is already in a use for a file -- not overwriting.', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'/'.$file.'</span>'). |
|
'</p>'."\n"); |
|
} elsif (($src ne '') && ($dest ne '')) { |
|
if (&File::Copy::copy($src,$dest)) { |
|
$newfile{$file} = 1; |
|
if ((-e $src.'.meta') && (!-e $dest.'.meta')) { |
|
if (&File::Copy::copy($src.'.meta',$dest.'.meta')) { |
|
#FIXME set distribution/copyright to author's default instead of custom. set author to $ca:$cd instead of $cdom:$cnum |
|
} |
|
} |
|
my ($ext) = ($file =~ /\.(\w+)$/); |
|
my $embstyle=&Apache::loncommon::fileembstyle($ext); |
|
if ($embstyle eq 'ssi') { |
|
#FIXME in any src or href attributes replace /res/$coursedom/$coursenum/ with /res/$cd/$ca/$subdir |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
$notopdir = 1; |
|
} |
|
} |
|
} |
|
if ($notopdir) { |
|
$r->print('<p><span class="LC_info">'.&mt('No files or sub-directories copied').'</span><br />'."\n". |
|
'<span class="LC_warning">'.&mt('Target directory: [_1] does not exist, and could not be created.', |
|
'<span class="LC_filename">'.$desturl.'/'.$subdir.'</span>'). |
|
'</span></p>'."\n"); |
|
} |
|
if (keys(%newdir)) { |
|
$r->print('<p>'.&mt('Created the following directories in [_1]:','<span class="LC_filename">'.$desturl.'/'.$subdir.'</span>'). |
|
'</p>'."\n". |
|
'<ul><li>'.join('</li><li>',sort(keys(%newdir))).'</li></ul></p>'."\n"); |
|
} |
|
if (keys(%newfile)) { |
|
$r->print('<p>'.&mt('Copied the following files to [_1]:','<span class="LC_filename">'.$desturl.'/'.$subdir.'</span>'). |
|
'</p>'."\n". |
|
'<ul><li>'.join('</li><li>',sort(keys(%newfile))).'</li></ul></p>'."\n"); |
|
} |
|
} else { |
|
$r->print('<p>'.&mt('No currently existing files or directories in Course Authoring Space selected for copying').'</p>'); |
|
$r->print(&endContentScreen()); |
|
return ''; |
|
} |
|
} else { |
|
my $formname = 'copycrsauthored'; |
|
my $chkname = 'copytouser'; |
|
my $context = 'crsauthored'; |
|
my (%subdirs,%files,@dirs_by_depth,@files_by_depth,%parent,%children,%hierarchy,@checked_maps); |
|
&Apache::lonnet::recursedirs($home,1,undef,$exclude,0,0,$srcurl,'',\%subdirs,\%files); |
|
foreach my $key (keys(%subdirs)) { |
|
next if (($key eq '/') || ($key eq '')); |
|
my @items = split(/\//,$key); |
|
my $dir = pop(@items); |
|
my $depth = scalar(@items); |
|
my $path; |
|
if (!$depth) { |
|
$path = '/'; |
|
} else { |
|
$path = join('/',@items); |
|
} |
|
$dirs_by_depth[$depth]{$path}{$dir} = 1; |
|
} |
|
foreach my $path (keys(%files)) { |
|
next if ($path eq ''); |
|
my $depth; |
|
if ($path eq '/') { |
|
$depth = 0; |
|
} else { |
|
$depth = scalar(split(/\//,$path)); |
|
} |
|
if (ref($files{$path}) eq 'HASH') { |
|
foreach my $file (keys(%{$files{$path}})) { |
|
$files_by_depth[$depth]{$path}{$file} = 1; |
|
} |
|
} |
|
} |
|
my ($info,$display,$onsubmit,$togglebuttons,$disabled); |
|
if ($readonly) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
if ($disabled) { |
|
$togglebuttons = '<br />'; |
|
} else { |
|
$togglebuttons = '<input type="button" value="'.&mt('check all').'" '. |
|
'onclick="javascript:checkAll(document.'.$formname.'.'.$chkname.')" />'. |
|
' <input type="button" value="'.&mt('uncheck all').'"'. |
|
' onclick="javascript:uncheckAll(document.'.$formname.'.'.$chkname.')" />'; |
|
} |
|
my $title=$origcrsdata{'description'}; |
|
$title=~s/[\/\s]+/\_/gs; |
|
$title=&clean($title); |
|
my $preamble = &authorspace_selector($r,$formname,$home,$title,%outhash); |
|
my $display = '<form name="'.$formname.'" action="" method="post">'."\n". |
|
$preamble."\n". |
|
'<div class="LC_float_left">'."\n". |
|
'<fieldset>'."\n". |
|
'<legend>'.&mt('Content to copy').(' 'x4).$togglebuttons.'</legend>'."\n". |
|
'<span class="LC_fontsize_medium">'. |
|
&mt('Choose the files and/or folders to copy from Course Authoring to User Authoring'). |
|
'</span><br /><br />'."\n"; |
|
my $count = 0; |
|
my $startcount = 4 + $home; |
|
my $lastcontainer = $startcount; |
|
$display .= &Apache::loncommon::start_data_table()."\n". |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Copy?').'</th>'. |
|
'<th>'.&mt('Title').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()."\n"; |
|
$count = &recurse_crsauthored(0,\@dirs_by_depth,\@files_by_depth,'/',$startcount, |
|
$count,\$display,\%parent,\%children,$readonly, |
|
$formname,$chkname,\$lastcontainer); |
|
$display .= &Apache::loncommon::end_data_table().'</fieldset>'; |
|
unless ($readonly) { |
|
$display .= '</div><div style="padding:0;clear:both;margin:0;border:0"></div>'. |
|
'<div>'. |
|
'<input type="submit" name="copyauthored" value="'.&mt("Copy Selected Content").'" />'. |
|
'</div>'; |
|
} |
|
$display .= &Apache::loncourserespicker::respicker_javascript($startcount,$count,$context,$formname,\%children, |
|
\%hierarchy,\@checked_maps,$home,$chkname); |
|
$r->print($display); |
|
} |
|
$r->print(&endContentScreen()); |
|
} |
|
|
|
sub recurse_crsauthored { |
|
my ($currdepth,$dirs_by_depth,$files_by_depth,$currpath,$startcount,$count,$displayref, |
|
$parent,$children,$readonly,$formname,$chkname,$lastcontainerref) = @_; |
|
return $count unless ((ref($dirs_by_depth) eq 'ARRAY') && (ref($files_by_depth) eq 'ARRAY')); |
|
my ($disabled,$hasdirs,$hasfiles,%unique,%dirs,%files); |
|
if ((ref($dirs_by_depth->[$currdepth]) eq 'HASH') && |
|
(ref($dirs_by_depth->[$currdepth]{$currpath}) eq 'HASH')) { |
|
$hasdirs = 1; |
|
%dirs = %{$dirs_by_depth->[$currdepth]{$currpath}}; |
|
map { $unique{$_} = 1; } keys(%dirs); |
|
} |
|
if ((ref($files_by_depth->[$currdepth]) eq 'HASH') && |
|
(ref($files_by_depth->[$currdepth]{$currpath}) eq 'HASH')) { |
|
$hasfiles = 1; |
|
%files = %{$files_by_depth->[$currdepth]{$currpath}}; |
|
map { $unique{$_} = 1; } keys(%files); |
|
} |
|
if ($readonly) { |
|
$disabled = ' disabled="disabled"'; |
|
} |
|
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
|
my $whitespace = |
|
'<img src="'.$location.'/whitespace_21.gif" class="LC_docs_spacer" alt="" />'; |
|
$parent->{$currdepth} = $$lastcontainerref; |
|
foreach my $item (sort { lc($a) cmp lc($b) } (keys(%unique))) { |
|
next if ($item eq ''); |
|
my $currelem; |
|
if ($hasdirs && exists($dirs{$item})) { |
|
$count ++; |
|
my $deeper = $currdepth+1; |
|
my ($newpath,$showpath); |
|
if ($currpath eq '/') { |
|
$newpath = $item; |
|
$showpath = $currpath.$item.'/'; |
|
} else { |
|
$newpath = $currpath.'/'.$item; |
|
$showpath = '/'.$currpath.'/'.$item.'/'; |
|
} |
|
$currelem = $count+$startcount; |
|
$$lastcontainerref = $currelem; |
|
$children->{$parent->{$currdepth}} .= $currelem.':'; |
|
my $icon = 'src="'.$location.'/navmap.folder.open.gif" alt="'.&mt('Folder').'"'; |
|
$$displayref .= &Apache::loncommon::start_data_table_row(). |
|
'<td><input type="checkbox" name="'.$chkname.'" value="'.&escape($showpath).'" '. |
|
'onclick="javascript:checkFolder(document.'.$formname.','."'$currelem'".')" '. |
|
$disabled.' /></td><td>'; |
|
for (my $i=0; $i<$currdepth; $i++) { |
|
$$displayref .= "$whitespace\n"; |
|
} |
|
$$displayref .= '<img '.$icon.' /> '.$item.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
$count = &recurse_crsauthored($deeper,$dirs_by_depth,$files_by_depth,$newpath, |
|
$startcount,$count,$displayref,$parent,$children, |
|
$readonly,$formname,$chkname,$lastcontainerref); |
|
} |
|
if ($hasfiles && exists($files{$item})) { |
|
$count ++; |
|
$currelem = $count+$startcount; |
|
$children->{$parent->{$currdepth}} .= $currelem.':'; |
|
my $icon = 'src="'.&Apache::loncommon::icon($item).'"'; |
|
my ($ext) = ($item =~ /\.([^.]+)$/); |
|
my $alttext; |
|
if (lc($ext) eq 'problem') { |
|
$alttext = ' alt="'.&mt('Problem Icon').'"'; |
|
} elsif ($ext =~ /^x?html?$/i) { |
|
$alttext = ' alt="'.&mt('Web Page Icon').'"'; |
|
} elsif ($ext =~ /^(jpg|gif|png|svg|jpeg)$/) { |
|
$alttext = ' alt="'.&mt('Image Icon').'"'; |
|
} else { |
|
$alttext = ' alt="'.&mt('Resource Icon').'"'; |
|
} |
|
my $showpath; |
|
if ($currpath eq '/') { |
|
$showpath = $currpath; |
|
} else { |
|
$showpath = "/$currpath/"; |
|
} |
|
$$displayref .= &Apache::loncommon::start_data_table_row(). |
|
'<td><input type="checkbox" name="'.$chkname.'" value="'.&escape($showpath.$item).'" '. |
|
'onclick="javascript:checkResource(document.'.$formname.','."'$currelem'".')" '. |
|
$disabled.' /></td><td>'; |
|
for (my $i=0; $i<$currdepth; $i++) { |
|
$$displayref .= "$whitespace\n"; |
|
} |
|
$$displayref .= '<img '.$icon.$alttext.' /> '.$item.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
} |
|
} |
|
$$lastcontainerref = $parent->{$currdepth}; |
|
return $count; |
|
} |
|
|
sub group_import { |
sub group_import { |
my ($coursenum, $coursedom, $folder, $container, $caller, $ltitoolsref, @files) = @_; |
my ($coursenum, $coursedom, $folder, $container, $caller, $ltitoolsref, @files) = @_; |
my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap, |
my ($donechk,$allmaps,%hierarchy,%titles,%addedmaps,%removefrommap, |
Line 5402 sub short_urls {
|
Line 5825 sub short_urls {
|
} |
} |
my %currtiny = &Apache::lonnet::dump('tiny',$cdom,$cnum); |
my %currtiny = &Apache::lonnet::dump('tiny',$cdom,$cnum); |
$r->print(&Apache::loncourserespicker::create_picker($navmap,'shorturls',$formname,$crstype,undef, |
$r->print(&Apache::loncourserespicker::create_picker($navmap,'shorturls',$formname,$crstype,undef, |
undef,undef,undef,undef,undef,\%currtiny,$readonly)); |
undef,undef,undef,undef,undef,\%currtiny,undef,$readonly)); |
} |
} |
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
} |
} |
Line 5877 sub handler {
|
Line 6300 sub handler {
|
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
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'}; |
|
my $coursehome=$env{'course.'.$env{'request.course.id'}.'.home'}; |
|
|
# get docroot |
# get docroot |
my $londocroot = $r->dir_config('lonDocRoot'); |
my $londocroot = $r->dir_config('lonDocRoot'); |
Line 5892 sub handler {
|
Line 6316 sub handler {
|
'Load_Map','Supplemental','Score_Upload_Form', |
'Load_Map','Supplemental','Score_Upload_Form', |
'Adding_Pages','Importing_LON-CAPA_Resource', |
'Adding_Pages','Importing_LON-CAPA_Resource', |
'Importing_IMS_Course','Uploading_From_Harddrive', |
'Importing_IMS_Course','Uploading_From_Harddrive', |
'Course_Roster','Web_Page','Dropbox','Simple_Problem') { |
'Course_Roster','Web_Page','Dropbox','Simple_Problem', |
|
'Standard_Problem','Course_Resources', |
|
'Search_LON-CAPA_Resource','Import_Stored_Links') { |
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); |
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); |
} |
} |
# Composite help files |
# Composite help files |
Line 5963 sub handler {
|
Line 6389 sub handler {
|
&init_breadcrumbs('versions','Check/Set Resource Versions','Docs_Check_Resource_Versions'); |
&init_breadcrumbs('versions','Check/Set Resource Versions','Docs_Check_Resource_Versions'); |
&checkversions($r,$canedit); |
&checkversions($r,$canedit); |
} elsif ($canedit && $env{'form.dumpcourse'}) { |
} elsif ($canedit && $env{'form.dumpcourse'}) { |
&init_breadcrumbs('dumpcourse','Copy '.&Apache::loncommon::course_type().' Content to Authoring Space'); |
&init_breadcrumbs('dumpcourse','Copy uploaded content to Authoring Space'); |
&dumpcourse($r); |
&dumpcourse($r); |
|
} elsif (($canedit || $canview) && ($env{'form.copyauthored'})) { |
|
&init_breadcrumbs('copyauthored','Copy from Course Authoring to User Authoring'); |
|
my $readonly; |
|
if (!$canedit) { |
|
$readonly = 1; |
|
} |
|
©crsauthored($r,$coursenum,$coursedom,$coursehome,$readonly); |
} elsif ($canedit && $env{'form.exportcourse'}) { |
} elsif ($canedit && $env{'form.exportcourse'}) { |
&init_breadcrumbs('exportcourse','IMS Export'); |
&init_breadcrumbs('exportcourse','IMS Export'); |
&Apache::imsexport::exportcourse($r); |
&Apache::imsexport::exportcourse($r); |
Line 6147 sub handler {
|
Line 6580 sub handler {
|
&Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom); |
&Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom); |
} |
} |
} |
} |
|
|
# If we are not allowed to make changes and this is supplemental content set folderpath |
# Set folderpath if we are not allowed to make changes and this is supplemental content |
if ((!$allowed) && ($supplementalflag)) { |
if ((!$allowed) && ($supplementalflag)) { |
unless ($env{'form.folderpath'} =~ /^supplemental/) { |
unless ($env{'form.folderpath'} =~ /^supplemental/) { |
$env{'form.folderpath'} = &supplemental_base(); |
$env{'form.folderpath'} = &supplemental_base(); |
Line 6501 sub handler {
|
Line 6934 sub handler {
|
|
|
if ($allowed && $toolsflag) { |
if ($allowed && $toolsflag) { |
$r->print(&startContentScreen('tools')); |
$r->print(&startContentScreen('tools')); |
$r->print(&generate_admin_menu($crstype,$canedit)); |
$r->print(&generate_admin_menu($crstype,$canedit,$coursenum,$coursedom)); |
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
} elsif ((!$showdoc) && (!$uploadphase)) { |
} elsif ((!$showdoc) && (!$uploadphase)) { |
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
Line 6509 sub handler {
|
Line 6942 sub handler {
|
'copm' => 'All documents out of a published map into this folder', |
'copm' => 'All documents out of a published map into this folder', |
'upfi' => 'Upload File', |
'upfi' => 'Upload File', |
'upld' => 'Upload Content', |
'upld' => 'Upload Content', |
'srch' => 'Search', |
'srch' => 'Search Repository', |
'impo' => 'Import', |
'impo' => 'Import from Repository', |
'lnks' => 'Import from Stored Links', |
'lnks' => 'Import from Stored Links', |
'impm' => 'Import from Assembled Map', |
'impm' => 'Import from Assembled Map', |
'imcr' => 'Import from Course Resources', |
'imcr' => 'Import from Course Resources', |
Line 6687 FUFORM
|
Line 7120 FUFORM
|
</form> |
</form> |
|
|
SEDFFORM |
SEDFFORM |
my $importcrsresform; |
my ($importcrsresform,$checkcrsres); |
my ($numdirs,$pickfile) = |
if ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.crsauthor'}) { |
&Apache::loncommon::import_crsauthor_form('coursepath','coursefile', |
$checkcrsres = 1; |
"resize_scrollbox('contentscroll','1','0');", |
} elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.crsauthor'} ne '0') { |
undef,'res'); |
my %domdefs=&Apache::lonnet::get_domain_defaults($coursedom); |
if ($pickfile) { |
my $type = lc($env{'course.'.$env{'request.course.id'}.'.type'}); |
$importcrsresform=(<<CRSFORM); |
unless (($type eq 'community') || ($type eq 'placement')) { |
|
$type = 'unofficial'; |
|
if ($env{'course.'.$env{'request.course.id'}.'internal.coursecode'} ne '') { |
|
$type = 'official'; |
|
} elsif ($env{'course.'.$env{'request.course.id'}.'internal.textbook'} ne '') { |
|
$type = 'textbook'; |
|
} else { |
|
$type = 'unofficial'; |
|
} |
|
} |
|
if ($domdefs{$type.'crsauthor'}) { |
|
$checkcrsres = 1; |
|
} |
|
} |
|
if ($checkcrsres) { |
|
my ($numdirs,$pickfile) = |
|
&Apache::loncommon::import_crsauthor_form('coursepath','coursefile', |
|
"resize_scrollbox('contentscroll','1','0');", |
|
undef,'res'); |
|
if ($pickfile) { |
|
$importcrsresform=(<<CRSFORM); |
<a class="LC_menubuttons_link" href="javascript:toggleImportCrsres('res');"> |
<a class="LC_menubuttons_link" href="javascript:toggleImportCrsres('res');"> |
$lt{'imcr'}</a>$help{'Course_Resources'} |
$lt{'imcr'}</a>$help{'Course_Resources'} |
<form action="/adm/coursedocs" method="post" name="crsresimportform" onsubmit="return validImportCrsRes();"> |
<form action="/adm/coursedocs" method="post" name="crsresimportform" onsubmit="return validImportCrsRes();"> |
Line 6716 SEDFFORM
|
Line 7169 SEDFFORM
|
</fieldset> |
</fieldset> |
</form> |
</form> |
CRSFORM |
CRSFORM |
|
} |
} |
} |
|
|
my $fromstoredjs; |
my $fromstoredjs; |
Line 6726 CRSFORM
|
Line 7180 CRSFORM
|
} |
} |
|
|
my @importpubforma = ( |
my @importpubforma = ( |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'" onclick="javascript:groupsearch()" />' => $pathitem."<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'" onclick="javascript:groupsearch()" />' => $pathitem."<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>$help{'Search_LON-CAPA_Resource'}" }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'" onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'" onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{lnks}.'" onclick="javascript:'.$fromstoredjs.';" />' => '<a class="LC_menubuttons_link" href="javascript:'.$fromstoredjs.';">'.$lt{'lnks'}.'</a>' }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{lnks}.'" onclick="javascript:'.$fromstoredjs.';" />' => '<a class="LC_menubuttons_link" href="javascript:'.$fromstoredjs.';">'.$lt{'lnks'}.'</a>'.$help{'Import_Stored_Links'} }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap(\'map\');" />' => $importpubform }, |
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/sequence.png" alt="'.$lt{impm}.'" onclick="javascript:toggleMap(\'map\');" />' => $importpubform }, |
); |
); |
if ($pickfile) { |
if ($importcrsresform) { |
push(@importpubforma,{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{imcr}.'" onclick="javascript:toggleImportCrsres(\'res\');" />' => $importcrsresform}); |
push(@importpubforma,{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/impcrsau.png" alt="'.$lt{imcr}.'" onclick="javascript:toggleImportCrsres(\'res\');" />' => $importcrsresform}); |
} |
} |
$importpubform = &create_form_ul(&create_list_elements(@importpubforma)); |
$importpubform = &create_form_ul(&create_list_elements(@importpubforma)); |
my $extresourcesform = |
my $extresourcesform = |
Line 6984 NWEBFORM
|
Line 7438 NWEBFORM
|
} |
} |
} |
} |
} |
} |
$pickdir .= '<option value="course">'.&mt('Course Resource').'</option>'."\n". |
if ($checkcrsres) { |
'</select><br />'."\n". |
$pickdir .= '<option value="course">'.&mt('Course Resource').'</option>'."\n"; |
|
} |
|
$pickdir .= '</select><br />'."\n". |
$lt{'dire'}. |
$lt{'dire'}. |
'<select name="authorpath" onchange="toggleCrsResTitle();">'. |
'<select name="authorpath" onchange="toggleCrsResTitle();">'. |
'<option value=""></option>'. |
'<option value=""></option>'. |
'</select><br />'."\n"; |
'</select><br />'."\n"; |
|
|
my %seltemplate_menus; |
my %seltemplate_menus; |
my @files = &Apache::lonhomework::get_template_list('problem'); |
my @files = &Apache::lonhomework::get_template_list('problem'); |
my @noexamplelink = ('blank.problem','blank.library','script.library'); |
my @noexamplelink = ('blank.problem','blank.library','script.library'); |
Line 7031 NWEBFORM
|
Line 7486 NWEBFORM
|
"toggleExampleText();",'template').'<br />'; |
"toggleExampleText();",'template').'<br />'; |
my $templatepreview = '<a href="#" target="sample" onclick="javascript:getExample(600,420,\'yes\',true); return false;">'. |
my $templatepreview = '<a href="#" target="sample" onclick="javascript:getExample(600,420,\'yes\',true); return false;">'. |
'<span id="newresexample">'.&mt('Example').'</span></a>'; |
'<span id="newresexample">'.&mt('Example').'</span></a>'; |
my $crsresform=(<<RESFORM); |
my $crsresform; |
|
if (($env{'user.author'}) || ($checkcrsres)) { |
|
$crsresform=(<<RESFORM); |
<a class="LC_menubuttons_link" href="javascript:toggleCrsRes('res');"> |
<a class="LC_menubuttons_link" href="javascript:toggleCrsRes('res');"> |
$lt{'stpr'}</a>$help{'Course_Resource'} |
$lt{'stpr'}</a>$help{'Standard_Problem'} |
<form action="/adm/coursedocs" method="post" name="courseresform"> |
<form action="/adm/coursedocs" method="post" name="courseresform"> |
<fieldset id="crsresform" style="display:none;"> |
<fieldset id="crsresform" style="display:none;"> |
<legend>$lt{'stpr'}</legend> |
<legend>$lt{'stpr'}</legend> |
Line 7087 NWEBFORM
|
Line 7544 NWEBFORM
|
</form> |
</form> |
|
|
RESFORM |
RESFORM |
|
} |
|
|
my $specialdocumentsform; |
my $specialdocumentsform; |
my @specialdocumentsforma; |
my @specialdocumentsforma; |
Line 7180 NGFFORM
|
Line 7638 NGFFORM
|
@gradingforma=( |
@gradingforma=( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform} |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{stpr}.'" onclick="javascript:toggleCrsRes(\'res\');" />'=>$crsresform}, |
|
); |
); |
|
if ($crsresform) { |
|
push(@gradingforma, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{stpr}.'" onclick="javascript:toggleCrsRes(\'res\');" />'=>$crsresform} |
|
); |
|
} |
$gradingform = &create_form_ul(&create_list_elements(@gradingforma)); |
$gradingform = &create_form_ul(&create_list_elements(@gradingforma)); |
|
|
@communityforma=( |
@communityforma=( |
Line 7196 NGFFORM
|
Line 7658 NGFFORM
|
|
|
my %orderhash = ( |
my %orderhash = ( |
'aa' => ['Upload',$fileuploadform], |
'aa' => ['Upload',$fileuploadform], |
'bb' => ['Import',$importpubform], |
'bb' => ['External',$externalform], |
'cc' => ['External',$externalform], |
'cc' => ['Import',$importpubform], |
'dd' => ['Assessment',$gradingform], |
'dd' => ['Assessment',$gradingform], |
'ff' => ['Other',$specialdocumentsform], |
'ff' => ['Other',$specialdocumentsform], |
); |
); |
Line 7577 sub remove_archive {
|
Line 8039 sub remove_archive {
|
} |
} |
|
|
sub generate_admin_menu { |
sub generate_admin_menu { |
my ($crstype,$canedit) = @_; |
my ($crstype,$canedit,$coursenum,$coursedom) = @_; |
my $lc_crstype = lc($crstype); |
my $lc_crstype = lc($crstype); |
my ($home,$other,%outhash)=&authorhosts(); |
my ($home,$other,%outhash)=&authorhosts(); |
my %lt= ( # do not translate here |
my %lt= ( # do not translate here |
Line 7585 sub generate_admin_menu {
|
Line 8047 sub generate_admin_menu {
|
'cv' => 'Check/Set Resource Versions', |
'cv' => 'Check/Set Resource Versions', |
'ls' => 'List Resource Identifiers', |
'ls' => 'List Resource Identifiers', |
'ct' => 'Display/Set Shortened URLs for Deep-linking', |
'ct' => 'Display/Set Shortened URLs for Deep-linking', |
|
'ca' => "Enter $crstype Authoring Space", |
'imse' => 'Export contents to IMS Archive', |
'imse' => 'Export contents to IMS Archive', |
'dcd' => "Copy $crstype Content to Authoring Space", |
'dcd' => 'Copy uploaded content to Authoring Space', |
|
'cpc' => 'Copy from Course Authoring to User Authoring', |
); |
); |
my ($candump,$dumpurl); |
my ($candump,$dumpurl,$exportcrsurl); |
if ($home + $other > 0) { |
if ($home + $other > 0) { |
$candump = 'F'; |
$candump = 'F'; |
if ($home) { |
if ($home) { |
$dumpurl = "javascript:injectData(document.courseverify,'dummy','dumpcourse','$lt{'dcd'}')"; |
$dumpurl = "javascript:injectData(document.courseverify,'dummy','dumpcourse','$lt{'dcd'}')"; |
|
$exportcrsurl = "javascript:injectData(document.courseverify,'dummy','copyauthored','$lt{'cpc'}')"; |
} else { |
} else { |
my @hosts; |
my @hosts; |
foreach my $aurole (keys(%outhash)) { |
foreach my $aurole (keys(%outhash)) { |
Line 7606 sub generate_admin_menu {
|
Line 8071 sub generate_admin_menu {
|
&HTML::Entities::encode($env{'request.role'},'"<>&').'&origurl='. |
&HTML::Entities::encode($env{'request.role'},'"<>&').'&origurl='. |
&HTML::Entities::encode('/adm/coursedocs?dumpcourse=1','"<>&'); |
&HTML::Entities::encode('/adm/coursedocs?dumpcourse=1','"<>&'); |
$dumpurl = "javascript:dump_needs_switchserver('$switchto')"; |
$dumpurl = "javascript:dump_needs_switchserver('$switchto')"; |
|
$exportcrsurl = $dumpurl; |
} else { |
} else { |
$dumpurl = "javascript:choose_switchserver_window()"; |
$dumpurl = "javascript:choose_switchserver_window()"; |
|
$exportcrsurl = $dumpurl; |
} |
} |
} |
} |
} |
} |
Line 7645 sub generate_admin_menu {
|
Line 8112 sub generate_admin_menu {
|
] |
] |
}); |
}); |
if ($canedit) { |
if ($canedit) { |
|
my ($crsauname,$crsaudom,$crshome); |
|
if (($coursenum ne '') && ($coursedom ne '')) { |
|
my $crsauthorurl = "/priv/$coursedom/$coursenum/"; |
|
($crsauname,$crsaudom,$crshome) = &Apache::lonnet::constructaccess($crsauthorurl); |
|
if (($crsauname eq $coursenum) && ($crsaudom eq $coursedom)) { |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
my $linkurl; |
|
if (grep(/^\Q$crshome\E$/,@ids)) { |
|
$linkurl = $crsauthorurl; |
|
} else { |
|
$linkurl = |
|
&Apache::lonhtmlcommon::jump_to_editres($crsauthorurl,$crshome,1); |
|
} |
|
if ((ref($menu[0]) eq 'HASH') && (ref($menu[0]->{'items'}) eq 'ARRAY')) { |
|
push(@{$menu[0]->{items}}, |
|
{ linktext => $lt{'ca'}, |
|
url => $linkurl, |
|
permission => 'F', |
|
help => 'Docs_Course_Authorspace', |
|
icon => 'impcrsau.png', |
|
linktitle => $lt{'ca'}, |
|
}); |
|
} |
|
} |
|
} |
push(@menu, |
push(@menu, |
{ categorytitle=>'Export', |
{ categorytitle=>'Export', |
items =>[ |
items =>[ |
Line 7664 sub generate_admin_menu {
|
Line 8156 sub generate_admin_menu {
|
}, |
}, |
] |
] |
}); |
}); |
|
if (($crsauname eq $coursenum) && ($crsaudom eq $coursedom)) { |
|
if ((ref($menu[1]) eq 'HASH') && (ref($menu[1]->{'items'}) eq 'ARRAY')) { |
|
push(@{$menu[1]->{items}}, |
|
{ linktext => $lt{'cpc'}, |
|
url => $exportcrsurl, |
|
permission => 'F', |
|
help => 'Docs_Export_Course_Author', |
|
icon => 'res.png', |
|
linktitle => $lt{'cpc'}, |
|
}); |
|
} |
|
} |
} |
} |
return '<form action="/adm/coursedocs" method="post" name="courseverify">'."\n". |
return '<form action="/adm/coursedocs" method="post" name="courseverify">'."\n". |
'<input type="hidden" id="dummy" />'."\n". |
'<input type="hidden" id="dummy" />'."\n". |
Line 8182 function toggleMap(caller) {
|
Line 8686 function toggleMap(caller) {
|
} |
} |
} |
} |
document.getElementById('importmapform').style.display=disp; |
document.getElementById('importmapform').style.display=disp; |
|
if (disp == 'block') { |
|
if (document.getElementById('importcrsresform')) { |
|
if (document.getElementById('importcrsresform').style.display == 'block') { |
|
document.getElementById('importcrsresform').style.display = 'none'; |
|
} |
|
} |
|
} |
resize_scrollbox('contentscroll','1','1'); |
resize_scrollbox('contentscroll','1','1'); |
} |
} |
return; |
return; |
Line 8382 function toggleImportCrsres(caller) {
|
Line 8893 function toggleImportCrsres(caller) {
|
} |
} |
} |
} |
document.getElementById('importcrsresform').style.display=disp; |
document.getElementById('importcrsresform').style.display=disp; |
|
if (disp == 'block') { |
|
if (document.getElementById('importmapform')) { |
|
if (document.getElementById('importmapform').style.display == 'block') { |
|
document.getElementById('importmapform').style.display = 'none'; |
|
} |
|
} |
|
} |
resize_scrollbox('contentscroll','1','0'); |
resize_scrollbox('contentscroll','1','0'); |
} |
} |
return; |
return; |
Line 8433 function populateDirSelects(form,locsel,
|
Line 8951 function populateDirSelects(form,locsel,
|
} |
} |
} |
} |
} |
} |
|
var templateradio = document.courseresform.elements['newresusetemp']; |
if (athome) { |
if (athome) { |
if (document.getElementById('stdprobswitch')) { |
if (document.getElementById('stdprobswitch')) { |
document.getElementById('stdprobswitch').style.display = 'none'; |
document.getElementById('stdprobswitch').style.display = 'none'; |
Line 8440 function populateDirSelects(form,locsel,
|
Line 8959 function populateDirSelects(form,locsel,
|
if (document.getElementById('newstdproblem')) { |
if (document.getElementById('newstdproblem')) { |
document.getElementById('newstdproblem').style.display = 'none'; |
document.getElementById('newstdproblem').style.display = 'none'; |
} |
} |
|
var canedit = '$canedit'; |
|
if (canedit) { |
|
if (templateradio.length > 1) { |
|
for (var i=0; i<templateradio.length; i++) { |
|
templateradio[i].disabled = false; |
|
} |
|
} |
|
document.courseresform.newresourcename.disabled = false; |
|
document.courseresform.newcrs.disabled = false; |
|
} |
var http = new XMLHttpRequest(); |
var http = new XMLHttpRequest(); |
var url = "/adm/courseauthor"; |
var url = "/adm/courseauthor"; |
var params = "role="+role+"&rec="+recurse+"&nonempty="+nonemptydir+"&addtop=1"; |
var params = "role="+role+"&rec="+recurse+"&nonempty="+nonemptydir+"&addtop=1"; |
Line 8478 function populateDirSelects(form,locsel,
|
Line 9007 function populateDirSelects(form,locsel,
|
if (document.getElementById('newstdproblem')) { |
if (document.getElementById('newstdproblem')) { |
document.getElementById('newstdproblem').style.display = 'none'; |
document.getElementById('newstdproblem').style.display = 'none'; |
} |
} |
|
if (templateradio.length > 1) { |
|
for (var i=0; i<templateradio.length; i++) { |
|
templateradio[i].disabled = true; |
|
} |
|
} |
|
document.courseresform.newresourcename.disabled = true; |
|
document.courseresform.newcrs.disabled = true; |
} |
} |
} |
} |
return; |
return; |
Line 9329 sub dump_switchserver_js {
|
Line 9865 sub dump_switchserver_js {
|
); |
); |
my %html_js_lt = &Apache::lonlocal::texthash( |
my %html_js_lt = &Apache::lonlocal::texthash( |
swit => 'Switch server?', |
swit => 'Switch server?', |
duco => 'Copying Content to Authoring Space', |
duco => 'Copying uploaded content to Authoring Space', |
yone => 'You need to switch to a server housing an Authoring Space for which you are author or co-author.', |
yone => 'You need to switch to a server housing an Authoring Space for which you are author or co-author.', |
chos => 'Choose server', |
chos => 'Choose server', |
); |
); |
Line 9470 sub makenewproblem {
|
Line 10006 sub makenewproblem {
|
if ($redirect) { |
if ($redirect) { |
my $rightsfile = 'default.rights'; |
my $rightsfile = 'default.rights'; |
my $sourcerights = "$path/$rightsfile"; |
my $sourcerights = "$path/$rightsfile"; |
|
&Apache::loncommon::crsauthor_rights($rightsfile,$path,$docroot,$coursenum,$coursedom); |
my $targetrights = $docroot."/res/$coursedom/$coursenum/$rightsfile"; |
my $targetrights = $docroot."/res/$coursedom/$coursenum/$rightsfile"; |
my $now = time; |
|
if (!-e $sourcerights) { |
|
my $cid = $coursedom.'_'.$coursenum; |
|
if (open(my $fh,">$sourcerights")) { |
|
print $fh <<END; |
|
<accessrule effect="deny" realm="" type="course" role="" /> |
|
<accessrule effect="allow" realm="$cid" type="course" role="" /> |
|
END |
|
close($fh); |
|
} |
|
} |
|
if (!-e "$sourcerights.meta") { |
|
if (open(my $fh,">$sourcerights.meta")) { |
|
my $author=$env{'environment.firstname'}.' '. |
|
$env{'environment.middlename'}.' '. |
|
$env{'environment.lastname'}.' '. |
|
$env{'environment.generation'}; |
|
$author =~ s/\s+$//; |
|
print $fh <<"END"; |
|
|
|
<abstract></abstract> |
|
<author>$author</author> |
|
<authorspace>$coursenum:$coursedom</authorspace> |
|
<copyright>private</copyright> |
|
<creationdate>$now</creationdate> |
|
<customdistributionfile></customdistributionfile> |
|
<dependencies></dependencies> |
|
<domain>$coursedom</domain> |
|
<highestgradelevel>0</highestgradelevel> |
|
<keywords></keywords> |
|
<language>notset </language> |
|
<lastrevisiondate>$now</lastrevisiondate> |
|
<lowestgradelevel>0</lowestgradelevel> |
|
<mime>rights</mime> |
|
<modifyinguser>$env{'user.name'}:$env{'user.domain'}</modifyinguser> |
|
<notes></notes> |
|
<obsolete></obsolete> |
|
<obsoletereplacement></obsoletereplacement> |
|
<owner>$coursenum:$coursedom</owner> |
|
<rule>deny:::course,allow:$cid::course</rule> |
|
<sourceavail></sourceavail> |
|
<standards></standards> |
|
<subject></subject> |
|
<title>Course Authoring Rights</title> |
|
END |
|
close($fh); |
|
} |
|
} |
|
if ((-e $sourcerights) && (-e "$sourcerights.meta")) { |
if ((-e $sourcerights) && (-e "$sourcerights.meta")) { |
if (!-e "$docroot/res/$coursedom") { |
if (!-e "$docroot/res/$coursedom") { |
mkdir("$docroot/res/$coursedom",0755); |
mkdir("$docroot/res/$coursedom",0755); |