version 1.484.2.85.2.2, 2020/01/20 20:16:28
|
version 1.484.2.93.2.15, 2023/09/06 13:35:14
|
Line 50 use GDBM_File;
|
Line 50 use GDBM_File;
|
use File::MMagic; |
use File::MMagic; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Cwd; |
use Cwd; |
|
use UUID::Tiny ':std'; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
|
my $iconpath; |
my $iconpath; |
Line 86 sub storemap {
|
Line 87 sub storemap {
|
|
|
if ($map =~ /^default/) { |
if ($map =~ /^default/) { |
$hadchanges=1; |
$hadchanges=1; |
} else { |
} elsif ($contentchg) { |
$suppchanges=1; |
$suppchanges=1; |
} |
} |
return ($errtext,0); |
return ($errtext,0); |
Line 178 sub default_folderpath {
|
Line 179 sub default_folderpath {
|
} |
} |
} |
} |
|
|
|
sub validate_supppath { |
|
my ($coursenum,$coursedom) = @_; |
|
my $backto; |
|
if ($env{'form.supppath'} ne '') { |
|
my @items = split(/\&/,$env{'form.supppath'}); |
|
my ($badpath,$got_supp,$supppath,%supphidden,%suppids); |
|
for (my $i=0; $i<@items; $i++) { |
|
my $odd = $i%2; |
|
if ((!$odd) && ($items[$i] !~ /^supplemental(|_\d+)$/)) { |
|
$badpath = 1; |
|
last; |
|
} elsif ($odd) { |
|
my $suffix; |
|
my $idx = $i-1; |
|
if ($items[$i] =~ /^([^:]*)::(|1):::$/) { |
|
$backto .= '&'.$1; |
|
} elsif ($items[$idx] eq 'supplemental') { |
|
$backto .= '&'.$items[$i]; |
|
} else { |
|
$backto .= '&'.$items[$i]; |
|
my $is_hidden; |
|
unless ($got_supp) { |
|
my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom); |
|
if (ref($supplemental) eq 'HASH') { |
|
if (ref($supplemental->{'hidden'}) eq 'HASH') { |
|
%supphidden = %{$supplemental->{'hidden'}}; |
|
} |
|
if (ref($supplemental->{'ids'}) eq 'HASH') { |
|
%suppids = %{$supplemental->{'ids'}}; |
|
} |
|
} |
|
$got_supp = 1; |
|
} |
|
if (ref($suppids{"/uploaded/$coursedom/$coursenum/$items[$idx].sequence"}) eq 'ARRAY') { |
|
my $mapid = $suppids{"/uploaded/$coursedom/$coursenum/$items[$idx].sequence"}->[0]; |
|
if ($supphidden{$mapid}) { |
|
$is_hidden = 1; |
|
} |
|
} |
|
$suffix = '::'.$is_hidden.':::'; |
|
} |
|
$supppath .= '&'.$items[$i].$suffix; |
|
} else { |
|
$supppath .= '&'.$items[$i]; |
|
$backto .= '&'.$items[$i]; |
|
} |
|
} |
|
if ($badpath) { |
|
delete($env{'form.supppath'}); |
|
} else { |
|
$supppath =~ s/^\&//; |
|
$backto =~ s/^\&//; |
|
$env{'form.supppath'} = $supppath; |
|
} |
|
} |
|
return $backto; |
|
} |
|
|
sub dumpcourse { |
sub dumpcourse { |
my ($r) = @_; |
my ($r) = @_; |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
Line 656 sub group_import {
|
Line 715 sub group_import {
|
$url = $1; |
$url = $1; |
my $marker = $2; |
my $marker = $2; |
my $info = $3; |
my $info = $3; |
my ($toolid,%toolhash,%toolsettings); |
my ($toolid,$toolprefix,$tooltype,%toolhash,%toolsettings); |
my @extras = ('linktext','explanation','crslabel','crstitle'); |
my @extras = ('linktext','explanation','crslabel','crstitle','crsappend'); |
my @toolinfo = split(/:/,$info); |
my @toolinfo = split(/:/,$info); |
if ($residx) { |
if ($residx) { |
%toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$coursedom,$coursenum); |
%toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$coursedom,$coursenum); |
Line 665 sub group_import {
|
Line 724 sub group_import {
|
} else { |
} else { |
$toolid = shift(@toolinfo); |
$toolid = shift(@toolinfo); |
} |
} |
|
if ($toolid =~ /^c/) { |
|
$tooltype = 'crs'; |
|
$toolprefix = 'c'; |
|
} else { |
|
$tooltype = 'dom'; |
|
} |
$toolid =~ s/\D//g; |
$toolid =~ s/\D//g; |
($toolhash{'target'},$toolhash{'width'},$toolhash{'height'}, |
($toolhash{'target'},$toolhash{'width'},$toolhash{'height'}, |
$toolhash{'linktext'},$toolhash{'explanation'}, |
$toolhash{'linktext'},$toolhash{'explanation'},$toolhash{'crslabel'}, |
$toolhash{'crslabel'},$toolhash{'crstitle'}) = @toolinfo; |
$toolhash{'crstitle'},$toolhash{'crsappend'},$toolhash{'gradable'}) = @toolinfo; |
foreach my $item (@extras) { |
foreach my $item (@extras) { |
$toolhash{$item} = &unescape($toolhash{$item}); |
$toolhash{$item} = &unescape($toolhash{$item}); |
} |
} |
|
if ($folder =~ /^supplemental/) { |
|
delete($toolhash{'gradable'}); |
|
} else { |
|
$toolhash{'gradable'} =~ s/\D+//g; |
|
} |
if (ref($ltitoolsref) eq 'HASH') { |
if (ref($ltitoolsref) eq 'HASH') { |
my @deleted; |
if (ref($ltitoolsref->{$tooltype}) eq 'HASH') { |
if (ref($ltitoolsref->{$toolid}) eq 'HASH') { |
if (ref($ltitoolsref->{$tooltype}->{$toolid}) eq 'HASH') { |
$toolhash{'id'} = $toolid; |
my %tools = %{$ltitoolsref->{$tooltype}->{$toolid}}; |
if (($toolhash{'target'} eq 'iframe') || ($toolhash{'target'} eq 'tab') || |
my @deleted; |
($toolhash{'target'} eq 'window')) { |
$toolhash{'id'} = $toolprefix.$toolid; |
if ($toolhash{'target'} eq 'window') { |
if (($toolhash{'target'} eq 'iframe') || ($toolhash{'target'} eq 'tab') || |
foreach my $item ('width','height') { |
($toolhash{'target'} eq 'window')) { |
$toolhash{$item} =~ s/^\s+//; |
if ($toolhash{'target'} eq 'window') { |
$toolhash{$item} =~ s/\s+$//; |
foreach my $item ('width','height') { |
if ($toolhash{$item} =~ /\D/) { |
$toolhash{$item} =~ s/^\s+//; |
delete($toolhash{$item}); |
$toolhash{$item} =~ s/\s+$//; |
if ($residx) { |
if ($toolhash{$item} =~ /\D/) { |
if ($toolsettings{$item}) { |
delete($toolhash{$item}); |
push(@deleted,$item); |
if ($residx) { |
|
if ($toolsettings{$item}) { |
|
push(@deleted,$item); |
|
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} elsif ($residx) { |
} elsif ($residx) { |
$toolhash{'target'} = $toolsettings{'target'}; |
$toolhash{'target'} = $toolsettings{'target'}; |
if ($toolhash{'target'} eq 'window') { |
if ($toolhash{'target'} eq 'window') { |
foreach my $item ('width','height') { |
foreach my $item ('width','height') { |
$toolhash{$item} = $toolsettings{$item}; |
$toolhash{$item} = $toolsettings{$item}; |
} |
|
} |
|
} elsif (ref($tools{'display'}) eq 'HASH') { |
|
$toolhash{'target'} = $tools{'display'}{'target'}; |
|
if ($toolhash{'target'} eq 'window') { |
|
$toolhash{'width'} = $tools{'display'}{'width'}; |
|
$toolhash{'height'} = $tools{'display'}{'height'}; |
} |
} |
} |
} |
} elsif (ref($ltitoolsref->{$toolid}->{'display'}) eq 'HASH') { |
if ($toolhash{'target'} eq 'iframe') { |
$toolhash{'target'} = $ltitoolsref->{$toolid}->{'display'}->{'target'}; |
foreach my $item ('width','height','linktext','explanation') { |
if ($toolhash{'target'} eq 'window') { |
delete($toolhash{$item}); |
$toolhash{'width'} = $ltitoolsref->{$toolid}->{'display'}->{'width'}; |
if ($residx) { |
$toolhash{'height'} = $ltitoolsref->{$toolid}->{'display'}->{'height'}; |
if ($toolsettings{$item}) { |
} |
push(@deleted,$item); |
} |
} |
if ($toolhash{'target'} eq 'iframe') { |
|
foreach my $item ('width','height','linktext','explanation') { |
|
delete($toolhash{$item}); |
|
if ($residx) { |
|
if ($toolsettings{$item}) { |
|
push(@deleted,$item); |
|
} |
} |
} |
} |
} |
} elsif ($toolhash{'target'} eq 'tab') { |
} elsif ($toolhash{'target'} eq 'tab') { |
foreach my $item ('width','height') { |
foreach my $item ('width','height') { |
delete($toolhash{$item}); |
delete($toolhash{$item}); |
if ($residx) { |
if ($residx) { |
if ($toolsettings{$item}) { |
if ($toolsettings{$item}) { |
push(@deleted,$item); |
push(@deleted,$item); |
} |
} |
} |
} |
} |
} |
} |
} |
if (ref($tools{'crsconf'}) eq 'HASH') { |
if (ref($ltitoolsref->{$toolid}->{'crsconf'}) eq 'HASH') { |
foreach my $item ('label','title','linktext','explanation') { |
foreach my $item ('label','title','linktext','explanation') { |
my $crsitem; |
my $crsitem; |
if (($item eq 'label') || ($item eq 'title')) { |
if (($item eq 'label') || ($item eq 'title')) { |
$crsitem = 'crs'.$item; |
$crsitem = 'crs'.$item; |
} else { |
} else { |
$crsitem = $item; |
$crsitem = $item; |
} |
} |
if ($tools{'crsconf'}{$item}) { |
if ($ltitoolsref->{$toolid}->{'crsconf'}->{$item}) { |
$toolhash{$crsitem} =~ s/^\s+//; |
$toolhash{$crsitem} =~ s/^\s+//; |
$toolhash{$crsitem} =~ s/\s+$//; |
$toolhash{$crsitem} =~ s/\s+$//; |
if ($toolhash{$crsitem} eq '') { |
if ($toolhash{$crsitem} eq '') { |
delete($toolhash{$crsitem}); |
|
} |
|
} else { |
delete($toolhash{$crsitem}); |
delete($toolhash{$crsitem}); |
} |
} |
} else { |
if (($residx) && (exists($toolsettings{$crsitem}))) { |
delete($toolhash{$crsitem}); |
unless (exists($toolhash{$crsitem})) { |
|
push(@deleted,$crsitem); |
|
} |
|
} |
|
} |
|
} |
|
if ($toolhash{'passback'}) { |
|
my $gradesecret = UUID::Tiny::create_uuid_as_string(UUID_V4); |
|
$toolhash{'gradesecret'} = $gradesecret; |
|
$toolhash{'gradesecretdate'} = time; |
|
} |
|
if ($toolhash{'roster'}) { |
|
my $rostersecret = UUID::Tiny::create_uuid_as_string(UUID_V4); |
|
$toolhash{'rostersecret'} = $rostersecret; |
|
$toolhash{'rostersecretdate'} = time; |
|
} |
|
my $changegradable; |
|
if (($residx) && ($folder =~ /^default/)) { |
|
if ($toolsettings{'gradable'}) { |
|
unless (($toolhash{'gradable'}) || (defined($LONCAPA::map::zombies[$residx]))) { |
|
push(@deleted,'gradable'); |
|
$changegradable = 1; |
|
} |
|
} elsif ($toolhash{'gradable'}) { |
|
$changegradable = 1; |
} |
} |
if (($residx) && (exists($toolsettings{$crsitem}))) { |
if (($caller eq 'londocs') && (defined($LONCAPA::map::zombies[$residx]))) { |
unless (exists($toolhash{$crsitem})) { |
$changegradable = 1; |
push(@deleted,$crsitem); |
if ($toolsettings{'gradable'}) { |
|
$toolhash{'gradable'} = 1; |
} |
} |
} |
} |
} |
} |
} |
my $putres = &Apache::lonnet::put('exttool_'.$marker,\%toolhash,$coursedom,$coursenum); |
my $putres = &Apache::lonnet::put('exttool_'.$marker,\%toolhash,$coursedom,$coursenum); |
if ($putres eq 'ok') { |
if ($putres eq 'ok') { |
if (@deleted) { |
if (@deleted) { |
&Apache::lonnet::del('exttool_'.$marker,\@deleted,$coursedom,$coursenum); |
&Apache::lonnet::del('exttool_'.$marker,\@deleted,$coursedom,$coursenum); |
} |
|
if (($changegradable) && ($folder =~ /^default/)) { |
|
my $val; |
|
if ($toolhash{'gradable'}) { |
|
$val = 'yes'; |
|
} else { |
|
$val = 'no'; |
|
} |
|
&LONCAPA::map::storeparameter($residx,'parameter_0_gradable',$val, |
|
'string_yesno'); |
|
&remember_parms($residx,'gradable','set',$val); |
|
} |
|
} else { |
|
return (&mt('Failed to save update to external tool.'),1); |
} |
} |
} |
} |
} |
} |
Line 783 sub group_import {
|
Line 896 sub group_import {
|
} |
} |
my $ext = 'false'; |
my $ext = 'false'; |
if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; } |
if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; } |
$name = &LONCAPA::map::qtunescape($name); |
|
if ($name eq '') { |
|
$name = &LONCAPA::map::qtunescape(&mt('Web Page')); |
|
} |
|
if ($url =~ m{^/uploaded/$coursedom/$coursenum/((?:docs|supplemental)/(?:default|\d+))/new\.html$}) { |
if ($url =~ m{^/uploaded/$coursedom/$coursenum/((?:docs|supplemental)/(?:default|\d+))/new\.html$}) { |
my $filepath = $1; |
my $filepath = $1; |
my $fname = $name; |
my $fname; |
if ($fname =~ /^\W+$/) { |
if ($name eq '') { |
|
$name = &mt('Web Page'); |
$fname = 'web'; |
$fname = 'web'; |
} else { |
} else { |
$fname =~ s/\W/_/g; |
$fname = $name; |
} |
$fname=&Apache::lonnet::clean_filename($fname); |
if (length($fname) > 15) { |
if ($fname eq '') { |
$fname = substr($fname,0,14); |
$fname = 'web'; |
|
} elsif (length($fname) > 15) { |
|
$fname = substr($fname,0,14); |
|
} |
} |
} |
|
my $title = &Apache::loncommon::cleanup_html($name); |
my $initialtext = &mt('Replace with your own content.'); |
my $initialtext = &mt('Replace with your own content.'); |
my $newhtml = <<END; |
my $newhtml = <<END; |
<html> |
<html> |
<head> |
<head> |
<title>$name</title> |
<title>$title</title> |
</head> |
</head> |
<body bgcolor="#ffffff"> |
<body bgcolor="#ffffff"> |
$initialtext |
$initialtext |
Line 824 END
|
Line 938 END
|
return (&mt('Failed to save new web page.'),1); |
return (&mt('Failed to save new web page.'),1); |
} |
} |
} |
} |
|
$name = &LONCAPA::map::qtunescape($name); |
$url = &LONCAPA::map::qtunescape($url); |
$url = &LONCAPA::map::qtunescape($url); |
$LONCAPA::map::resources[$residx] = |
$LONCAPA::map::resources[$residx] = |
join(':', ($name, $url, $ext, 'normal', 'res')); |
join(':', ($name, $url, $ext, 'normal', 'res')); |
Line 864 END
|
Line 979 END
|
&storemap($coursenum, $coursedom, $folder.'.'.$container,1); |
&storemap($coursenum, $coursedom, $folder.'.'.$container,1); |
unless ($fatal) { |
unless ($fatal) { |
if ($folder =~ /^supplemental/) { |
if ($folder =~ /^supplemental/) { |
&Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1); |
|
my ($errtext,$fatal) = &mapread($coursenum,$coursedom, |
my ($errtext,$fatal) = &mapread($coursenum,$coursedom, |
$folder.'.'.$container); |
$folder.'.'.$container); |
} |
} |
Line 941 sub docs_change_log {
|
Line 1055 sub docs_change_log {
|
'// <![CDATA['."\n". |
'// <![CDATA['."\n". |
&Apache::loncommon::display_filter_js('docslog')."\n". |
&Apache::loncommon::display_filter_js('docslog')."\n". |
&editing_js($env{'user.domain'},$env{'user.name'},$supplementalflag, |
&editing_js($env{'user.domain'},$env{'user.name'},$supplementalflag, |
$coursedom,$coursenum,'',$canedit,'',\$navmap)."\n". |
$coursedom,$coursenum,'','',$canedit,'',\$navmap)."\n". |
&history_tab_js()."\n". |
&history_tab_js()."\n". |
&Apache::lonratedt::editscript('simple')."\n". |
&Apache::lonratedt::editscript('simple')."\n". |
'// ]]>'."\n". |
'// ]]>'."\n". |
Line 991 sub docs_change_log {
|
Line 1105 sub docs_change_log {
|
'encrypturl' => 'URL hidden', |
'encrypturl' => 'URL hidden', |
'randompick' => 'Randomly pick', |
'randompick' => 'Randomly pick', |
'randomorder' => 'Randomly ordered', |
'randomorder' => 'Randomly ordered', |
|
'gradable' => 'Grade can be assigned to External Tool', |
'set' => 'set to', |
'set' => 'set to', |
'del' => 'deleted'); |
'del' => 'deleted'); |
my $filter = &Apache::loncommon::display_filter('docslog')."\n". |
my $filter = &Apache::loncommon::display_filter('docslog')."\n". |
Line 1097 sub docs_change_log {
|
Line 1212 sub docs_change_log {
|
} |
} |
$r->print('</ul>'); |
$r->print('</ul>'); |
if ($docslog{$id}{'logentry'}{'parameter_res'}) { |
if ($docslog{$id}{'logentry'}{'parameter_res'}) { |
$r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>'); |
my ($title,$url) = split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'},3); |
foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') { |
if ($title eq '') { |
|
($title) = ($url =~ m{/([^/]+)$}); |
|
} elsif ($is_supp) { |
|
$title = &Apache::loncommon::parse_supplemental_title($title); |
|
} |
|
$r->print(&LONCAPA::map::qtescape($title).':<ul>'); |
|
foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder','gradable') { |
if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) { |
if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) { |
# FIXME: internationalization seems wrong here |
# FIXME: internationalization seems wrong here |
$r->print('<li>'. |
$r->print('<li>'. |
Line 1166 sub update_paste_buffer {
|
Line 1287 sub update_paste_buffer {
|
# Construct identifiers for current contents of user's paste buffer |
# Construct identifiers for current contents of user's paste buffer |
if (@currpaste) { |
if (@currpaste) { |
foreach my $suffix (@currpaste) { |
foreach my $suffix (@currpaste) { |
my $cid = $env{'docs.markedcopy_crs_'.$suffix}; |
my $cid = $env{'docs.markedcopy_crs_'.$suffix}; |
my $url = $env{'docs.markedcopy_url_'.$suffix}; |
my $url = $env{'docs.markedcopy_url_'.$suffix}; |
my $mapidx = $env{'docs.markedcopy_map_'.$suffix}; |
my $mapidx = $env{'docs.markedcopy_map_'.$suffix}; |
if (($cid =~ /^$match_domain(?:_)$match_courseid$/) && |
if (($cid =~ /^$match_domain(?:_)$match_courseid$/) && |
($url ne '')) { |
($url ne '')) { |
$pasteurls{$cid.'_'.$url.'_'.$mapidx} = 1; |
if ($url eq '/res/lib/templates/simpleproblem.problem') { |
} |
$pasteurls{$cid.'_'.$mapidx} = 1; |
|
} elsif ($url =~ m{^/res/$match_domain/$match_username/}) { |
|
$pasteurls{$url} = 1; |
|
} else { |
|
$pasteurls{$cid.'_'.$url} = 1; |
|
} |
|
} |
} |
} |
} |
} |
|
|
Line 1181 sub update_paste_buffer {
|
Line 1308 sub update_paste_buffer {
|
|
|
my @pathitems = split(/\&/,$env{'form.folderpath'}); |
my @pathitems = split(/\&/,$env{'form.folderpath'}); |
my @folderconf = split(/\:/,$pathitems[-1]); |
my @folderconf = split(/\:/,$pathitems[-1]); |
my $ispage = $folderconf[4]; |
my $ispage = $folderconf[5]; |
|
|
foreach my $item (@possibles) { |
foreach my $item (@possibles) { |
my ($orderidx,$cmd) = split(/:/,$item); |
my ($orderidx,$cmd) = split(/:/,$item); |
Line 1194 sub update_paste_buffer {
|
Line 1321 sub update_paste_buffer {
|
$env{'form.folderpath'},\%curr_groups); |
$env{'form.folderpath'},\%curr_groups); |
next if ($denied{'copy'}); |
next if ($denied{'copy'}); |
$url=~s{http(:|:)//https(:|:)//}{https$2//}; |
$url=~s{http(:|:)//https(:|:)//}{https$2//}; |
next if (exists($pasteurls{$coursedom.'_'.$coursenum.'_'.$mapidx})); |
if ($url eq '/res/lib/templates/simpleproblem.problem') { |
|
next if (exists($pasteurls{$coursedom.'_'.$coursenum.'_'.$mapidx})); |
|
} elsif ($url =~ m{^/res/$match_domain/$match_username/}) { |
|
next if (exists($pasteurls{$url})); |
|
} else { |
|
next if (exists($pasteurls{$coursedom.'_'.$coursenum.'_'.$url})); |
|
} |
my ($suffix,$errortxt,$locknotfreed) = |
my ($suffix,$errortxt,$locknotfreed) = |
&new_timebased_suffix($env{'user.domain'},$env{'user.name'},'paste'); |
&new_timebased_suffix($env{'user.domain'},$env{'user.name'},'paste'); |
if ($suffix ne '') { |
if ($suffix ne '') { |
Line 1283 sub print_paste_buffer {
|
Line 1416 sub print_paste_buffer {
|
} |
} |
|
|
my @currpaste = split(/,/,$env{'docs.markedcopies'}); |
my @currpaste = split(/,/,$env{'docs.markedcopies'}); |
my ($pasteitems,@pasteable); |
my ($pasteitems,@pasteable,$same_institution,$checkedsameinst); |
my $clipboardcount = 0; |
my $clipboardcount = 0; |
|
|
# Construct identifiers for current contents of user's paste buffer |
# Construct identifiers for current contents of user's paste buffer |
Line 1296 sub print_paste_buffer {
|
Line 1429 sub print_paste_buffer {
|
($url ne '')) { |
($url ne '')) { |
$clipboardcount ++; |
$clipboardcount ++; |
my ($is_external,$othercourse,$fromsupp,$is_uploaded_map,$parent, |
my ($is_external,$othercourse,$fromsupp,$is_uploaded_map,$parent, |
$canpaste,$nopaste,$othercrs,$areachange,$is_exttool); |
$canpaste,$nopaste,$othercrs,$areachange,$is_exttool,$toolcdom, |
|
$toolcnum,$marker); |
my $extension = (split(/\./,$env{'docs.markedcopy_url_'.$suffix}))[-1]; |
my $extension = (split(/\./,$env{'docs.markedcopy_url_'.$suffix}))[-1]; |
if ($url =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?::|:))//} ) { |
if ($url =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?::|:))//} ) { |
$is_external = 1; |
$is_external = 1; |
} elsif ($url =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$}) { |
} elsif ($url =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/ext\.tool$}) { |
|
($toolcdom,$toolcnum,$marker) = ($1,$2,$3); |
$is_exttool = 1; |
$is_exttool = 1; |
} |
} |
if ($folder =~ /^supplemental/) { |
if ($folder =~ /^supplemental/) { |
Line 1338 sub print_paste_buffer {
|
Line 1473 sub print_paste_buffer {
|
if ($cid ne $env{'request.course.id'}) { |
if ($cid ne $env{'request.course.id'}) { |
my ($srcdom,$srcnum) = split(/_/,$cid); |
my ($srcdom,$srcnum) = split(/_/,$cid); |
if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) { |
if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) { |
if (($is_exttool) && ($srcdom ne $coursedom)) { |
if ($is_exttool) { |
$canpaste = 0; |
if ($toolcdom ne $coursedom) { |
$nopaste = &mt('Paste from another domain unavailable.'); |
$canpaste = 0; |
} else { |
$nopaste = &mt('Paste from another domain unavailable.'); |
$othercrs = '<br />'.&mt('(from another course)'); |
} elsif ($toolcnum ne $coursenum) { |
|
my %toolsettings = |
|
&Apache::lonnet::dump('exttool_'.$marker,$toolcdom,$toolcnum); |
|
my %tooltypes = &Apache::loncommon::usable_exttools(); |
|
if ((($toolsettings{'id'} =~ /^c\d+$/) && (!$tooltypes{'crs'})) || |
|
(($toolsettings{'id'} =~ /^\d+$/) && (!$tooltypes{'dom'}))) { |
|
$canpaste = 0; |
|
$nopaste = &mt('Paste from another course unavailable.'); |
|
} elsif ($toolsettings{'id'} =~ /^c\d+$/) { |
|
unless ($checkedsameinst) { |
|
my $primary_id = &Apache::lonnet::domain($coursedom,'primary'); |
|
my $intdom = &Apache::lonnet::internet_dom($primary_id); |
|
if ($intdom ne '') { |
|
my $internet_names = |
|
&Apache::lonnet::get_internet_names($Apache::lonnet::perlvar{'lonHostID'}); |
|
if (ref($internet_names) eq 'ARRAY') { |
|
if (grep(/^\Q$intdom\E$/,@{$internet_names})) { |
|
$same_institution = 1; |
|
} |
|
} |
|
} |
|
$checkedsameinst = 1; |
|
} |
|
if ($same_institution) { |
|
$othercrs = '<br />'.&mt('(from another course)'); |
|
} else { |
|
$nopaste = &mt('Paste from another course unavailable.'); |
|
} |
|
} else { |
|
$othercrs = '<br />'.&mt('(from another course)'); |
|
} |
|
} |
} |
} |
} else { |
} else { |
$canpaste = 0; |
$canpaste = 0; |
Line 1391 sub print_paste_buffer {
|
Line 1557 sub print_paste_buffer {
|
} |
} |
$pasteitems .= '<label><input type="checkbox" name="pasting" id="pasting_'.$suffix.'" value="'.$suffix.'" '.$onclick.'/>'.$buffer.'</label>'; |
$pasteitems .= '<label><input type="checkbox" name="pasting" id="pasting_'.$suffix.'" value="'.$suffix.'" '.$onclick.'/>'.$buffer.'</label>'; |
if ($nopaste) { |
if ($nopaste) { |
$pasteitems .= $nopaste; |
$pasteitems .= ' <span class="LC_cusr_emph">'.$nopaste.'</span>'; |
} else { |
} else { |
if ($othercrs) { |
if ($othercrs) { |
$pasteitems .= $othercrs; |
$pasteitems .= $othercrs; |
Line 1641 sub do_paste_from_buffer {
|
Line 1807 sub do_paste_from_buffer {
|
return(); |
return(); |
} |
} |
|
|
my (%msgs,%before,%after,@dopaste,%is_map,%notinsupp,%notincrs,%notindom,%duplicate, |
my (%msgs,%before,%after,@dopaste,%is_map,%notinsupp,%notincrs,%notindom, |
%prefixchg,%srcdom,%srcnum,%srcmapidx,%marktomove,$save_err,$lockerrors,$allresult); |
%othcrstool,%duplicate,%prefixchg,%srcdom,%srcnum,%srcmapidx, |
|
%marktomove,$save_err,$lockerrors,$allresult,%currcrsltitools, |
|
%currltititles,$currltimax,$gotcrsltitools); |
|
$currltimax = 0; |
|
$gotcrsltitools = 0; |
foreach my $suffix (@topaste) { |
foreach my $suffix (@topaste) { |
my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix}); |
my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix}); |
my $cid=&LONCAPA::map::qtescape($env{'docs.markedcopy_crs_'.$suffix}); |
my $cid=&LONCAPA::map::qtescape($env{'docs.markedcopy_crs_'.$suffix}); |
Line 1669 sub do_paste_from_buffer {
|
Line 1838 sub do_paste_from_buffer {
|
} |
} |
$srcdom{$suffix} = $srcd; |
$srcdom{$suffix} = $srcd; |
$srcnum{$suffix} = $srcn; |
$srcnum{$suffix} = $srcn; |
} elsif ($url =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$}) { |
} elsif (($url =~ m{^/res/lib/templates/\w+\.problem$}) || |
|
($url =~ m{^/adm/$match_domain/$match_username/\d+/(bulletinboard|smppg)$}) || |
|
($url =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$})) { |
my ($srcd,$srcn) = split(/_/,$cid); |
my ($srcd,$srcn) = split(/_/,$cid); |
# When paste buffer was populated using an active role in a different course |
# When paste buffer was populated using an active role in a different course |
# check for mdc privilege in the course from which the resource was pasted |
# check for mdc privilege in the course from which the resource was pasted |
Line 1680 sub do_paste_from_buffer {
|
Line 1851 sub do_paste_from_buffer {
|
} |
} |
} |
} |
# When buffer was populated using an active role in a different course |
# When buffer was populated using an active role in a different course |
# disallow pasting of External Tool if course is in a different domain. |
# disallow pasting of External Tool if course is in a different domain, |
if ($srcd ne $coursedom) { |
# or if External Tool use is not permitted in this course. |
$notindom{$suffix} = 1; |
if ($url =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/ext\.tool$}) { |
next; |
my ($toolcdom,$toolcnum,$marker) = ($1,$2,$3); |
} |
if ($toolcdom ne $coursedom) { |
$srcdom{$suffix} = $srcd; |
$notindom{$suffix} = 1; |
$srcnum{$suffix} = $srcn; |
|
} elsif (($url =~ m{^/res/lib/templates/\w+\.problem$}) || |
|
($url =~ m{^/adm/$match_domain/$match_username/\d+/(bulletinboard|smppg)$})) { |
|
my ($srcd,$srcn) = split(/_/,$cid); |
|
# When paste buffer was populated using an active role in a different course |
|
# check for mdc privilege in the course from which the resource was pasted |
|
if (($srcd ne $coursedom) || ($srcn ne $coursenum)) { |
|
unless ($env{"user.priv.cm./$srcd/$srcn"} =~ /\Q:mdc&F\E/) { |
|
$notincrs{$suffix} = 1; |
|
next; |
next; |
|
} elsif ($toolcnum ne $coursenum) { |
|
my %toolsettings = |
|
&Apache::lonnet::dump('exttool_'.$marker,$toolcdom,$toolcnum); |
|
my %tooltypes = &Apache::loncommon::usable_exttools(); |
|
if ((($toolsettings{'id'} =~ /^c\d+$/) && (!$tooltypes{'crs'})) || |
|
(($toolsettings{'id'} =~ /^\d+$/) && (!$tooltypes{'dom'}))) { |
|
$othcrstool{$suffix} = 1; |
|
next; |
|
} |
|
if ($toolsettings{'id'} =~ /^c\d+$/) { |
|
unless ($gotcrsltitools) { |
|
%currcrsltitools = |
|
&Apache::lonnet::get_course_lti($coursenum,$coursedom,'consumer'); |
|
foreach my $item (sort(keys(%currcrsltitools))) { |
|
if (ref($currcrsltitools{$item}) eq 'HASH') { |
|
$currltimax ++; |
|
if (ref($currltititles{$currcrsltitools{$item}{'title'}}) eq 'ARRAY') { |
|
push(@{$currltititles{$currcrsltitools{$item}{'title'}}},$item); |
|
} else { |
|
$currltititles{$currcrsltitools{$item}{'title'}} = [$item]; |
|
} |
|
} |
|
} |
|
$gotcrsltitools = 1; |
|
} |
|
} |
} |
} |
} |
} |
$srcdom{$suffix} = $srcd; |
$srcdom{$suffix} = $srcd; |
Line 1706 sub do_paste_from_buffer {
|
Line 1894 sub do_paste_from_buffer {
|
if ($url=~/\.(page|sequence)$/) { |
if ($url=~/\.(page|sequence)$/) { |
$is_map{$suffix} = 1; |
$is_map{$suffix} = 1; |
} |
} |
|
|
if ($url =~ m{^/uploaded/$match_domain/$match_courseid/([^/]+)}) { |
if ($url =~ m{^/uploaded/$match_domain/$match_courseid/([^/]+)}) { |
my $oldprefix = $1; |
my $oldprefix = $1; |
# When pasting content from Main Content to Supplemental Content and vice versa |
# When pasting content from Main Content to Supplemental Content and vice versa |
Line 1751 sub do_paste_from_buffer {
|
Line 1938 sub do_paste_from_buffer {
|
%msgs = &Apache::lonlocal::texthash ( |
%msgs = &Apache::lonlocal::texthash ( |
notinsupp => 'Paste failed: content type is not supported within Supplemental Content', |
notinsupp => 'Paste failed: content type is not supported within Supplemental Content', |
notincrs => 'Paste failed: Item is from a different course which you do not have rights to edit.', |
notincrs => 'Paste failed: Item is from a different course which you do not have rights to edit.', |
notindom => 'Paste failed: Item is an external tool from a course in a different donain.', |
notindom => 'Paste failed: Item is an external tool from a course in a different domain.', |
|
othcrstool => 'Paste failed: Item is an external tool from a different course, for which use is not allowed in this course.', |
duplicate => 'Paste failed: only one instance of a particular published sequence or page is allowed within each course.', |
duplicate => 'Paste failed: only one instance of a particular published sequence or page is allowed within each course.', |
); |
); |
|
|
Line 1780 sub do_paste_from_buffer {
|
Line 1968 sub do_paste_from_buffer {
|
# Retrieve information about all course maps in main content area |
# Retrieve information about all course maps in main content area |
|
|
my $allmaps = {}; |
my $allmaps = {}; |
my (@toclear,%mapurls,%lockerrs,%msgerrs,%results,$donechk); |
my (@toclear,%mapurls,%lockerrs,%msgerrs,%results,$donechk, |
|
@updatetoolsenc,$updatetoolscache,$checkedsameinst, |
|
$same_institution); |
|
|
# Loop over the items to paste |
# Loop over the items to paste |
foreach my $suffix (@dopaste) { |
foreach my $suffix (@dopaste) { |
Line 1869 sub do_paste_from_buffer {
|
Line 2059 sub do_paste_from_buffer {
|
cdom => $coursedom, |
cdom => $coursedom, |
cnum => $coursenum, |
cnum => $coursenum, |
); |
); |
|
if ($prefix eq 'ext.tool') { |
|
if ($prefixchg{$suffix} eq 'docstosupp') { |
|
$info{'delgradable'} = 1; |
|
} |
|
} |
if (($srcdom{$suffix} =~ /^$match_domain$/) && ($srcnum{$suffix} =~ /^$match_courseid$/)) { |
if (($srcdom{$suffix} =~ /^$match_domain$/) && ($srcnum{$suffix} =~ /^$match_courseid$/)) { |
unless (($srcdom{$suffix} eq $coursedom) && ($srcnum{$suffix} eq $coursenum)) { |
unless (($srcdom{$suffix} eq $coursedom) && ($srcnum{$suffix} eq $coursenum)) { |
$fromothercrs = 1; |
$fromothercrs = 1; |
$info{'cdom'} = $srcdom{$suffix}; |
$info{'cdom'} = $srcdom{$suffix}; |
$info{'cnum'} = $srcnum{$suffix}; |
$info{'cnum'} = $srcnum{$suffix}; |
|
unless ($checkedsameinst) { |
|
my $primary_id = &Apache::lonnet::domain($coursedom,'primary'); |
|
my $intdom = &Apache::lonnet::internet_dom($primary_id); |
|
if ($intdom ne '') { |
|
my $internet_names = |
|
&Apache::lonnet::get_internet_names($Apache::lonnet::perlvar{'lonHostID'}); |
|
if (ref($internet_names) eq 'ARRAY') { |
|
if (grep(/^\Q$intdom\E$/,@{$internet_names})) { |
|
$same_institution = 1; |
|
} |
|
} |
|
} |
|
$checkedsameinst = 1; |
|
} |
} |
} |
} |
} |
unless (($env{'form.docs.markedcopy_options_'.$suffix} eq 'move') && (!$fromothercrs)) { |
unless (($env{'form.docs.markedcopy_options_'.$suffix} eq 'move') && (!$fromothercrs)) { |
my (%lockerr,$msg); |
my (%lockerr,$msg); |
my ($newurl,$result,$errtext) = |
my ($newurl,$result,$errtext) = |
&dbcopy(\%info,$coursedom,$coursenum,\%lockerr); |
&dbcopy(\%info,$coursedom,$coursenum,\%lockerr,\%currltititles, |
|
\$currltimax,\@updatetoolsenc,\$updatetoolscache,$same_institution); |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
$url = $newurl; |
$url = $newurl; |
$title=&mt('Copy of').' '.$title; |
$title=&mt('Copy of').' '.$title; |
Line 1960 sub do_paste_from_buffer {
|
Line 2170 sub do_paste_from_buffer {
|
©_templated_files($url,$srcdom{$suffix},$srcnum{$suffix},$srcmapidx{$suffix}, |
©_templated_files($url,$srcdom{$suffix},$srcnum{$suffix},$srcmapidx{$suffix}, |
$coursedom,$coursenum,$template,$newidx,"$folder.$container"); |
$coursedom,$coursenum,$template,$newidx,"$folder.$container"); |
} |
} |
|
} elsif ($url =~ /ext\.tool$/) { |
|
if (($newidx) && ($folder=~/^default/)) { |
|
my $marker = (split(m{/},$url))[4]; |
|
my %toolsettings = &Apache::lonnet::dump('exttool_'.$marker,$coursedom,$coursenum); |
|
my $val = 'no'; |
|
if ($toolsettings{'gradable'}) { |
|
$val = 'yes'; |
|
} |
|
&LONCAPA::map::storeparameter($newidx,'parameter_0_gradable',$val, |
|
'string_yesno'); |
|
&remember_parms($newidx,'gradable','set',$val); |
|
} |
} |
} |
$LONCAPA::map::resources[$newidx]=$title.':'.&LONCAPA::map::qtunescape($url). |
$LONCAPA::map::resources[$newidx]=$title.':'.&LONCAPA::map::qtunescape($url). |
':'.$ext.':normal:res'; |
':'.$ext.':normal:res'; |
Line 2036 sub do_paste_from_buffer {
|
Line 2258 sub do_paste_from_buffer {
|
} |
} |
} |
} |
} |
} |
|
if (($updatetoolscache) || (@updatetoolsenc)) { |
|
&update_ltitools_caches($coursedom,$coursenum,$updatetoolscache, |
|
\@updatetoolsenc); |
|
} |
&clear_from_buffer(\@toclear,\@currpaste); |
&clear_from_buffer(\@toclear,\@currpaste); |
my $msgsarray; |
my $msgsarray; |
foreach my $suffix (keys(%msgs)) { |
foreach my $suffix (keys(%msgs)) { |
Line 2084 sub clear_from_buffer {
|
Line 2310 sub clear_from_buffer {
|
return $numdel; |
return $numdel; |
} |
} |
|
|
|
sub update_ltitools_caches { |
|
my ($coursedom,$coursenum,$updatetoolscache,$updatetoolsenc) = @_; |
|
my $hashid=$coursedom.'_'.$coursenum; |
|
if ($updatetoolscache) { |
|
&Apache::lonnet::devalidate_cache_new('courseltitools',$hashid); |
|
} |
|
if ((ref($updatetoolsenc) eq 'ARRAY') && |
|
(@{$updatetoolsenc})) { |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
my $updatedone; |
|
foreach my $lonhost (@{$updatetoolsenc}) { |
|
if (grep(/^\Q$lonhost\E$/,@ids)) { |
|
unless ($updatedone) { |
|
&Apache::lonnet::devalidate_cache_new('crsltitoolsenc',$hashid); |
|
} |
|
$updatedone = 1; |
|
} else { |
|
&Apache::lonnet::remote_devalidate_cache($lonhost,["crsltitoolsenc:$hashid"]); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
sub get_newmap_url { |
sub get_newmap_url { |
my ($url,$folder,$prefixchg,$coursedom,$coursenum,$srcdom,$srcnum, |
my ($url,$folder,$prefixchg,$coursedom,$coursenum,$srcdom,$srcnum, |
$titleref,$allmaps,$newurls) = @_; |
$titleref,$allmaps,$newurls) = @_; |
Line 2145 sub get_newmap_url {
|
Line 2395 sub get_newmap_url {
|
} |
} |
|
|
sub dbcopy { |
sub dbcopy { |
my ($dbref,$coursedom,$coursenum,$lockerrorsref) = @_; |
my ($dbref,$coursedom,$coursenum,$lockerrorsref,$currltititles, |
|
$currltimax,$updatetoolsenc,$updatetoolscache,$same_institution) = @_; |
my ($url,$result,$errtext); |
my ($url,$result,$errtext); |
if (ref($dbref) eq 'HASH') { |
if (ref($dbref) eq 'HASH') { |
$url = $dbref->{'src'}; |
$url = $dbref->{'src'}; |
Line 2189 sub dbcopy {
|
Line 2440 sub dbcopy {
|
my %contents=&Apache::lonnet::dump($db_name, |
my %contents=&Apache::lonnet::dump($db_name, |
$dbref->{'cdom'}, |
$dbref->{'cdom'}, |
$dbref->{'cnum'}); |
$dbref->{'cnum'}); |
|
my ($toolcopyerror,$toolpassback,$toolroster,%toolinfo,$oldtoolid,$defincrs); |
|
if ($url eq '/adm/'.$dbref->{'cdom'}.'/'.$dbref->{'cnum'}."/$marker/ext.tool") { |
|
if ($contents{'id'} =~ /^(|c)(\d+)$/) { |
|
$oldtoolid = $2; |
|
if ($1 eq 'c') { |
|
$defincrs = 1; |
|
%toolinfo = |
|
&Apache::lonnet::get('ltitools',[$oldtoolid],$dbref->{'cdom'},$dbref->{'cnum'}); |
|
} else { |
|
%toolinfo= &Apache::lonnet::get_domain_lti($dbref->{'cdom'},'consumer'); |
|
} |
|
if (ref($toolinfo{$oldtoolid}) eq 'HASH') { |
|
if ($toolinfo{$oldtoolid}{'passback'}) { |
|
$toolpassback = 1; |
|
} |
|
if ($toolinfo{$oldtoolid}{'roster'}) { |
|
$toolroster = 1; |
|
} |
|
} else { |
|
$toolcopyerror = 1; |
|
$errtext = &mt('Could not retrieve original settings for pasted external tool.'); |
|
} |
|
} |
|
unless (($dbref->{'cnum'} eq $coursenum) && ($dbref->{'cdom'} eq $coursedom)) { |
|
$url = "/adm/$coursedom/$coursenum/$marker/ext.tool"; |
|
if ($contents{'crstitle'} ne '') { |
|
$contents{'crstitle'} = $env{'course.'.$coursedom.'_'.$coursenum.'.description'}; |
|
} |
|
if (($defincrs) && (!$toolcopyerror)) { |
|
my %newtool; |
|
my $oldcdom = $dbref->{'cdom'}; |
|
my $oldcnum = $dbref->{'cnum'}; |
|
my $title = $toolinfo{$oldtoolid}{'title'}; |
|
if (ref($currltititles) eq 'HASH') { |
|
if (exists($currltititles->{$title})) { |
|
$title .= ' (copied from another course)'; |
|
} |
|
} |
|
my ($newid,$iderror) = |
|
&Apache::lonnet::get_ltitools_id('course',$coursedom,$coursenum,$title); |
|
if ($newid =~ /^\d+$/) { |
|
%{$newtool{$newid}} = %{$toolinfo{$oldtoolid}}; |
|
$newtool{$newid}{'title'} = $title; |
|
if (ref($currltimax)) { |
|
$newtool{$newid}{'order'} = $$currltimax; |
|
} |
|
if ($newtool{$newid}{'image'} =~ m{^\Q/uploaded/$oldcdom/$oldcnum/toollogo/$oldtoolid/\E([^/]+)$}) { |
|
my $fname = $1; |
|
my $content = &Apache::lonnet::getfile($newtool{$newid}{'image'}); |
|
if ($content eq '-1') { |
|
delete($newtool{$newid}{'image'}); |
|
} else { |
|
$env{'form.'.$suffix.'.image'} = $content; |
|
my $newlogo = |
|
&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$suffix.'.image',"toollogo/$newid/$fname"); |
|
delete($env{'form.'.$suffix.'.image'}); |
|
if ($newlogo =~ m{^/uploaded/}) { |
|
$newtool{$newid}{'image'} = $newlogo; |
|
} else { |
|
delete($newtool{$newid}{'image'}); |
|
} |
|
} |
|
} |
|
my $newusable; |
|
if ($same_institution) { |
|
my %oldtoolsenc = &Apache::lonnet::eget('nohist_toolsenc',[$oldtoolid],$oldcdom,$oldcnum); |
|
if (ref($oldtoolsenc{$oldtoolid}) eq 'HASH') { |
|
my %newtoolsenc; |
|
%{$newtoolsenc{$newid}} = %{$oldtoolsenc{$oldtoolid}}; |
|
my $putres = &Apache::lonnet::put('nohist_toolsenc',\%newtoolsenc,$coursedom,$coursenum,1); |
|
if ($putres eq 'ok') { |
|
if (ref($updatetoolsenc) eq 'ARRAY') { |
|
my $newhome = &Apache::lonnet::homeserver($coursenum,$coursedom); |
|
unless (grep(/^\Q$newhome\E$/,@{$updatetoolsenc})) { |
|
push(@{$updatetoolsenc},$newhome); |
|
} |
|
} |
|
$newusable = 1; |
|
} |
|
} |
|
} |
|
if ($newtool{$newid}{'usable'}) { |
|
unless ($newusable) { |
|
delete($newtool{$newid}{'usable'}); |
|
} |
|
} |
|
my $putres = &Apache::lonnet::put('ltitools',\%newtool,$coursedom,$coursenum); |
|
if ($putres eq 'ok') { |
|
$contents{'id'} = "c$newid"; |
|
if (ref($updatetoolscache)) { |
|
$$updatetoolscache ++; |
|
} |
|
if (ref($currltititles->{$title}) eq 'ARRAY') { |
|
push(@{$currltititles->{$title}},$newid); |
|
} else { |
|
$currltititles->{$title} = [$newid]; |
|
} |
|
if (ref($currltimax)) { |
|
$$currltimax ++; |
|
} |
|
} else { |
|
$toolcopyerror = 1; |
|
$errtext = &mt('Unable to save external tool definition in Course Settings.'); |
|
} |
|
} else { |
|
$toolcopyerror = 1; |
|
$errtext = &mt('Unable to retrieve new tool ID when adding external tool definition to Course Settings.'); |
|
} |
|
} |
|
} |
|
} |
if (exists($contents{'uploaded.photourl'})) { |
if (exists($contents{'uploaded.photourl'})) { |
my $photo = $contents{'uploaded.photourl'}; |
my $photo = $contents{'uploaded.photourl'}; |
my ($subdir,$fname) = |
my ($subdir,$fname) = |
Line 2208 sub dbcopy {
|
Line 2570 sub dbcopy {
|
} |
} |
} |
} |
$db_name =~ s{_\d*$ }{_$suffix}x; |
$db_name =~ s{_\d*$ }{_$suffix}x; |
$result=&Apache::lonnet::put($db_name,\%contents, |
if ($prefix eq 'exttool') { |
$coursedom,$coursenum); |
unless ($toolcopyerror) { |
if ($result eq 'ok') { |
foreach my $key ('oldgradesecret','gradesecret','gradesecretdate','oldrostersecret','rostersecret','rostersecretdate') { |
$url =~ s{/(\d*)/(smppg|bulletinboard|ext\.tool)$}{/$suffix/$2}x; |
if (exists($contents{$key})) { |
|
delete($contents{$key}); |
|
} |
|
} |
|
if ($dbref->{'delgradable'}) { |
|
if (exists($contents{'gradable'})) { |
|
delete($contents{'gradable'}); |
|
} |
|
} |
|
if ($toolpassback) { |
|
if ($contents{'gradable'}) { |
|
my $gradesecret = UUID::Tiny::create_uuid_as_string(UUID_V4); |
|
$contents{'gradesecret'} = $gradesecret; |
|
$contents{'gradesecretdate'} = time; |
|
} |
|
} |
|
if ($toolroster) { |
|
my $rostersecret = UUID::Tiny::create_uuid_as_string(UUID_V4); |
|
$contents{'rostersecret'} = $rostersecret; |
|
$contents{'rostersecretdate'} = time; |
|
} |
|
} |
|
} |
|
if (($prefix eq 'exttool') && ($toolcopyerror)) { |
|
$result = 'error'; |
|
} else { |
|
$result=&Apache::lonnet::put($db_name,\%contents, |
|
$coursedom,$coursenum); |
|
if ($result eq 'ok') { |
|
$url =~ s{/(\d*)/(smppg|bulletinboard|ext\.tool)$}{/$suffix/$2}x; |
|
} |
} |
} |
} |
} |
if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) { |
if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) { |
Line 2366 sub contained_map_check {
|
Line 2758 sub contained_map_check {
|
if ($token->[1] eq 'resource') { |
if ($token->[1] eq 'resource') { |
next if ($token->[2]->{'type'} eq 'zombie'); |
next if ($token->[2]->{'type'} eq 'zombie'); |
my $ressrc = $token->[2]->{'src'}; |
my $ressrc = $token->[2]->{'src'}; |
if ($folder =~ /^supplemental/) { |
if ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/ext\.tool$}) { |
|
my ($srcdom,$srcnum,$marker) = ($1,$2,$3); |
|
unless ($srcdom eq $coursedom) { |
|
$removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc; |
|
next; |
|
} |
|
unless ($srcnum eq $coursenum) { |
|
my %toolsettings = |
|
&Apache::lonnet::dump('exttool_'.$marker,$srcdom,$srcnum); |
|
my %tooltypes = &Apache::loncommon::usable_exttools(); |
|
if ((($toolsettings{'id'} =~ /^c\d+$/) && (!$tooltypes{'crs'})) || |
|
(($toolsettings{'id'} =~ /^\d+$/) && (!$tooltypes{'dom'}))) { |
|
$removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc; |
|
next; |
|
} |
|
} |
|
} elsif ($folder =~ /^supplemental/) { |
unless (&supp_pasteable($ressrc)) { |
unless (&supp_pasteable($ressrc)) { |
$removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc; |
$removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc; |
next; |
next; |
Line 2489 sub url_paste_fixups {
|
Line 2897 sub url_paste_fixups {
|
$changed = 1; |
$changed = 1; |
} |
} |
} |
} |
} elsif ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/.+$}) { |
} elsif ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/(.+)$}) { |
next if ($skip); |
next if ($skip); |
my $srcdom = $1; |
my $srcdom = $1; |
my $srcnum = $2; |
my $srcnum = $2; |
|
my $rem = $3; |
|
my ($is_exttool,$exttoolchg); |
|
if ($rem =~ m{\d+/ext\.tool$}) { |
|
$is_exttool = 1; |
|
} |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
$rewrites->{$oldurl}{$id} = $ressrc; |
$rewrites->{$oldurl}{$id} = $ressrc; |
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
$dbcopies->{$oldurl}{$id}{'cdom'} = $srcdom; |
$dbcopies->{$oldurl}{$id}{'cdom'} = $srcdom; |
$dbcopies->{$oldurl}{$id}{'cnum'} = $srcnum; |
$dbcopies->{$oldurl}{$id}{'cnum'} = $srcnum; |
$changed = 1; |
$changed = 1; |
|
if ($is_exttool) { |
|
$exttoolchg = 1; |
|
} |
|
} elsif (($is_exttool) && |
|
($env{'form.docs.markedcopy_options'} ne 'move')) { |
|
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
|
$dbcopies->{$oldurl}{$id}{'cdom'} = $srcdom; |
|
$dbcopies->{$oldurl}{$id}{'cnum'} = $srcnum; |
|
$changed = 1; |
|
$exttoolchg = 1; |
|
} |
|
if (($is_exttool) && ($prefixchg)) { |
|
if ($oldurl =~ m{^/uploaded/$match_domain/$match_courseid/default}) { |
|
if ($exttoolchg) { |
|
$dbcopies->{$oldurl}{$id}{'delgradable'} = 1; |
|
} |
|
} |
} |
} |
} elsif ($ressrc =~ m{^/adm/$match_domain/$match_username/\d+/(smppg|bulletinboard)$}) { |
} elsif ($ressrc =~ m{^/adm/$match_domain/$match_username/\d+/(smppg|bulletinboard)$}) { |
if (($fromcdom ne $cdom) || ($fromcnum ne $cnum) || |
if (($fromcdom ne $cdom) || ($fromcnum ne $cnum) || |
Line 2545 sub apply_fixups {
|
Line 2975 sub apply_fixups {
|
$oldurl,$url,$caller) = @_; |
$oldurl,$url,$caller) = @_; |
my (%rewrites,%zombies,%removefrommap,%removeparam,%dbcopies,%retitles, |
my (%rewrites,%zombies,%removefrommap,%removeparam,%dbcopies,%retitles, |
%params,%newsubdir,%before,%after,%copies,%docmoves,%mapmoves,@msgs, |
%params,%newsubdir,%before,%after,%copies,%docmoves,%mapmoves,@msgs, |
%resdatacopy,%lockerrors,$lockmsg); |
%resdatacopy,%lockerrors,$lockmsg,%currcrsltitools,$gotcrsltitools, |
|
%currltititles,$currltimax); |
|
$currltimax = 0; |
if (ref($updated) eq 'HASH') { |
if (ref($updated) eq 'HASH') { |
if (ref($updated->{'rewrites'}) eq 'HASH') { |
if (ref($updated->{'rewrites'}) eq 'HASH') { |
%rewrites = %{$updated->{'rewrites'}}; |
%rewrites = %{$updated->{'rewrites'}}; |
Line 2661 sub apply_fixups {
|
Line 3093 sub apply_fixups {
|
$storefn =~ s/^((?:default|supplemental)_)(\d+)/$1$newsubdir{$key}/; |
$storefn =~ s/^((?:default|supplemental)_)(\d+)/$1$newsubdir{$key}/; |
} |
} |
my $mapcontent = &Apache::lonnet::getfile($key); |
my $mapcontent = &Apache::lonnet::getfile($key); |
|
if (($mapcontent eq '-1') && ($before{'map'} eq 'supplemental') && |
|
($after{'map'} eq 'default') && |
|
($key =~ m{^/uploaded/$match_domain/$match_courseid/supplemental_\d+\.sequence$})) { |
|
$mapcontent = '<map>'."\n". |
|
'<resource id="1" src="" type="start" />'."\n". |
|
'<link from="1" to="2" index="1" />'."\n". |
|
'<resource id="2" src="" type="finish" />'."\n". |
|
'</map>'; |
|
} |
if ($mapcontent eq '-1') { |
if ($mapcontent eq '-1') { |
if (ref($errors) eq 'HASH') { |
if (ref($errors) eq 'HASH') { |
$errors->{$key} = 1; |
$errors->{$key} = 1; |
Line 2687 sub apply_fixups {
|
Line 3128 sub apply_fixups {
|
} |
} |
} |
} |
} |
} |
|
my ($updatetoolscache,@updatetoolsenc,$same_institution,$checkedsameinst); |
foreach my $key (keys(%updates)) { |
foreach my $key (keys(%updates)) { |
my (%torewrite,%toretitle,%toremove,%remparam,%currparam,%zombie,%newdb); |
my (%torewrite,%toretitle,%toremove,%remparam,%currparam,%zombie,%newdb); |
if (ref($rewrites{$key}) eq 'HASH') { |
if (ref($rewrites{$key}) eq 'HASH') { |
Line 2707 sub apply_fixups {
|
Line 3149 sub apply_fixups {
|
if (ref($dbcopies{$key}) eq 'HASH') { |
if (ref($dbcopies{$key}) eq 'HASH') { |
foreach my $idx (keys(%{$dbcopies{$key}})) { |
foreach my $idx (keys(%{$dbcopies{$key}})) { |
if (ref($dbcopies{$key}{$idx}) eq 'HASH') { |
if (ref($dbcopies{$key}{$idx}) eq 'HASH') { |
|
my $oldurl = $dbcopies{$key}{$idx}{'src'}; |
|
my $oldcdom = $dbcopies{$key}{$idx}{'cdom'}; |
|
my $oldcnum = $dbcopies{$key}{$idx}{'cnum'}; |
|
my $oldmarker; |
|
if ($oldurl =~ m{^\Q/adm/$oldcdom/$oldcnum/\E(\d+)/ext\.tool$}) { |
|
$oldmarker = $1; |
|
unless (($gotcrsltitools) || |
|
(($oldcnum eq $cnum) && ($oldcdom eq $cdom))) { |
|
my %oldtoolsettings=&Apache::lonnet::dump('exttool_'.$oldmarker,$oldcdom,$oldcnum); |
|
if ($oldtoolsettings{'id'} =~ /^c\d+$/) { |
|
unless ($gotcrsltitools) { |
|
%currcrsltitools = |
|
&Apache::lonnet::get_course_lti($cnum,$cdom,'consumer'); |
|
foreach my $item (sort(keys(%currcrsltitools))) { |
|
if (ref($currcrsltitools{$item}) eq 'HASH') { |
|
$currltimax ++; |
|
if (ref($currltititles{$currcrsltitools{$item}{'title'}}) eq 'ARRAY') { |
|
push(@{$currltititles{$currcrsltitools{$item}{'title'}}},$item); |
|
} else { |
|
$currltititles{$currcrsltitools{$item}{'title'}} = [$item]; |
|
} |
|
} |
|
} |
|
$gotcrsltitools = 1; |
|
} |
|
unless ($checkedsameinst) { |
|
my $primary_id = &Apache::lonnet::domain($cdom,'primary'); |
|
my $intdom = &Apache::lonnet::internet_dom($primary_id); |
|
if ($intdom ne '') { |
|
my $internet_names = |
|
&Apache::lonnet::get_internet_names($Apache::lonnet::perlvar{'lonHostID'}); |
|
if (ref($internet_names) eq 'ARRAY') { |
|
if (grep(/^\Q$intdom\E$/,@{$internet_names})) { |
|
$same_institution = 1; |
|
} |
|
} |
|
} |
|
$checkedsameinst = 1; |
|
} |
|
} |
|
} |
|
} |
my ($newurl,$result,$errtext) = |
my ($newurl,$result,$errtext) = |
&dbcopy($dbcopies{$key}{$idx},$cdom,$cnum,\%lockerrors); |
&dbcopy($dbcopies{$key}{$idx},$cdom,$cnum,\%lockerrors,\%currltititles, |
|
\$currltimax,\@updatetoolsenc,\$updatetoolscache,$same_institution); |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
$newdb{$idx} = $newurl; |
$newdb{$idx} = $newurl; |
|
if ($newurl =~ /ext\.tool$/) { |
|
if ($torewrite{$idx} eq "/adm/$oldcdom/$oldcnum/$oldmarker/ext.tool") { |
|
if ($newurl =~ m{^\Q/adm/$cdom/$cnum/\E(\d+)/ext.tool$}) { |
|
my $newmarker = $1; |
|
unless ($oldmarker eq $newmarker) { |
|
$torewrite{$idx} = "/adm/$oldcdom/$oldcnum/$newmarker/ext.tool"; |
|
} |
|
} |
|
} |
|
} |
} elsif (ref($errors) eq 'HASH') { |
} elsif (ref($errors) eq 'HASH') { |
$errors->{$key} = 1; |
$errors->{$key} = 1; |
} |
} |
Line 2849 sub apply_fixups {
|
Line 3344 sub apply_fixups {
|
} |
} |
} |
} |
} |
} |
|
if (($updatetoolscache) || (@updatetoolsenc)) { |
|
&update_ltitools_caches($cdom,$cnum,$updatetoolscache, |
|
\@updatetoolsenc); |
|
} |
} |
} |
return ('ok',\@msgs,$lockmsg); |
return ('ok',\@msgs,$lockmsg); |
} |
} |
Line 2943 sub update_parameter {
|
Line 3442 sub update_parameter {
|
my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]); |
my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]); |
$name=&LONCAPA::map::qtescape($name); |
$name=&LONCAPA::map::qtescape($name); |
$url=&LONCAPA::map::qtescape($url); |
$url=&LONCAPA::map::qtescape($url); |
next unless ($name && $url); |
next unless $url; |
my $is_map; |
my $is_map; |
if ($url =~ m{/uploaded/.+\.(page|sequence)$}) { |
if ($url =~ m{/uploaded/.+\.(page|sequence)$}) { |
$is_map = 1; |
$is_map = 1; |
Line 3028 sub update_parameter {
|
Line 3527 sub update_parameter {
|
|
|
sub handle_edit_cmd { |
sub handle_edit_cmd { |
my ($coursenum,$coursedom) =@_; |
my ($coursenum,$coursedom) =@_; |
|
my $haschanges = 0; |
if ($env{'form.cmd'} eq '') { |
if ($env{'form.cmd'} eq '') { |
return 0; |
return $haschanges; |
} |
} |
my ($cmd,$idx)=split('_',$env{'form.cmd'}); |
my ($cmd,$idx)=split('_',$env{'form.cmd'}); |
|
|
Line 3044 sub handle_edit_cmd {
|
Line 3544 sub handle_edit_cmd {
|
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
} |
} |
splice(@LONCAPA::map::order, $idx, 1); |
splice(@LONCAPA::map::order, $idx, 1); |
|
$haschanges = 1; |
} elsif ($cmd eq 'cut') { |
} elsif ($cmd eq 'cut') { |
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
splice(@LONCAPA::map::order, $idx, 1); |
splice(@LONCAPA::map::order, $idx, 1); |
|
$haschanges = 1; |
} elsif ($cmd eq 'up' |
} elsif ($cmd eq 'up' |
&& ($idx) && (defined($LONCAPA::map::order[$idx-1]))) { |
&& ($idx) && (defined($LONCAPA::map::order[$idx-1]))) { |
@LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1]; |
@LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1]; |
|
$haschanges = 1; |
} elsif ($cmd eq 'down' |
} elsif ($cmd eq 'down' |
&& defined($LONCAPA::map::order[$idx+1])) { |
&& defined($LONCAPA::map::order[$idx+1])) { |
@LONCAPA::map::order[$idx+1,$idx] = @LONCAPA::map::order[$idx,$idx+1]; |
@LONCAPA::map::order[$idx+1,$idx] = @LONCAPA::map::order[$idx,$idx+1]; |
|
$haschanges = 1; |
} elsif ($cmd eq 'rename') { |
} elsif ($cmd eq 'rename') { |
my $comment = &LONCAPA::map::qtunescape($env{'form.title'}); |
my $comment = &LONCAPA::map::qtunescape($env{'form.title'}); |
if ($comment=~/\S/) { |
if ($comment=~/\S/) { |
Line 3066 sub handle_edit_cmd {
|
Line 3566 sub handle_edit_cmd {
|
# Devalidate title cache |
# Devalidate title cache |
my $renamed_url=&LONCAPA::map::qtescape($url); |
my $renamed_url=&LONCAPA::map::qtescape($url); |
&Apache::lonnet::devalidate_title_cache($renamed_url); |
&Apache::lonnet::devalidate_title_cache($renamed_url); |
|
$haschanges = 1; |
} else { |
|
return 0; |
|
} |
} |
return 1; |
return $haschanges; |
} |
} |
|
|
sub editor { |
sub editor { |
Line 3380 sub editor {
|
Line 3878 sub editor {
|
$r->print('</div>'); |
$r->print('</div>'); |
} |
} |
|
|
|
if ((!$allowed) && ($folder =~ /^supplemental_\d+$/)) { |
|
my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom); |
|
if (ref($supplemental) eq 'HASH') { |
|
if ((ref($supplemental->{'hidden'}) eq 'HASH') && |
|
(ref($supplemental->{'ids'}) eq 'HASH')) { |
|
if (ref($supplemental->{'ids'}->{"/uploaded/$coursedom/$coursenum/$folder.$container"}) eq 'ARRAY') { |
|
my $mapnum = $supplemental->{'ids'}->{"/uploaded/$coursedom/$coursenum/$folder.$container"}->[0]; |
|
if ($supplemental->{'hidden'}->{$mapnum}) { |
|
$ishidden = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
my ($to_show,$output,@allidx,@allmapidx,%filters,%lists,%curr_groups); |
my ($to_show,$output,@allidx,@allmapidx,%filters,%lists,%curr_groups); |
%filters = ( |
%filters = ( |
canremove => [], |
canremove => [], |
Line 3403 sub editor {
|
Line 3916 sub editor {
|
push(@allmapidx,$res); |
push(@allmapidx,$res); |
} |
} |
|
|
|
if (($supplementalflag) && (!$allowed) && (!$env{'request.role.adv'})) { |
|
if (($ishidden) || ((&LONCAPA::map::getparameter($res,'parameter_hiddenresource'))[0]=~/^yes$/i)) { |
|
$idx++; |
|
next; |
|
} |
|
} |
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res, |
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res, |
$coursenum,$coursedom,$crstype, |
$coursenum,$coursedom,$crstype, |
$pathitem,$supplementalflag,$container, |
$pathitem,$supplementalflag,$container, |
\%filters,\%curr_groups,$ltitoolsref,$canedit, |
\%filters,\%curr_groups,$ltitoolsref,$canedit, |
$isencrypted,$navmapref,$hostname); |
$isencrypted,$ishidden,$navmapref,$hostname); |
$idx++; |
$idx++; |
$shown++; |
$shown++; |
} |
} |
Line 3416 sub editor {
|
Line 3935 sub editor {
|
my $need_save; |
my $need_save; |
if ($allowed || ($supplementalflag && $folder eq 'supplemental')) { |
if ($allowed || ($supplementalflag && $folder eq 'supplemental')) { |
my $toolslink; |
my $toolslink; |
if ($allowed) { |
if ($allowed || $canedit) { |
|
my $helpitem = 'Navigation_Screen'; |
|
if (!$allowed) { |
|
$helpitem = 'Supplemental_Navigation'; |
|
} |
$toolslink = '<table><tr><td>' |
$toolslink = '<table><tr><td>' |
.&Apache::loncommon::help_open_menu('Navigation Screen', |
.&Apache::loncommon::help_open_menu('Navigation Screen', |
'Navigation_Screen',undef,'RAT') |
$helpitem,undef,'RAT') |
.'</td><td class="LC_middle">'.&mt('Tools:').'</td>' |
.'</td><td class="LC_middle">'.&mt('Tools:').'</td>' |
.'<td align="left"><ul id="LC_toolbar">' |
.'<td align="left"><ul id="LC_toolbar">' |
.'<li><a href="/adm/coursedocs?forcesupplement=1&command=editsupp" ' |
.'<li><a href="/adm/coursedocs?forcesupplement=1&command=editsupp" ' |
Line 3435 sub editor {
|
Line 3958 sub editor {
|
.&Apache::loncommon::start_data_table_header_row() |
.&Apache::loncommon::start_data_table_header_row() |
.'<th colspan="2">'.&mt('Move').'</th>' |
.'<th colspan="2">'.&mt('Move').'</th>' |
.'<th colspan="2">'.&mt('Actions').'</th>' |
.'<th colspan="2">'.&mt('Actions').'</th>' |
.'<th>'.&mt('Document').'</th>'; |
.'<th>'.&mt('Document').'</th>' |
if ($folder !~ /^supplemental/) { |
.'<th colspan="2">'.&mt('Settings').'</th>' |
$to_show .= '<th colspan="4">'.&mt('Settings').'</th>'; |
.&Apache::loncommon::end_data_table_header_row(); |
} |
|
$to_show .= &Apache::loncommon::end_data_table_header_row(); |
|
if ($folder !~ /^supplemental/) { |
if ($folder !~ /^supplemental/) { |
$lists{'canhide'} = join(',',@allidx); |
$lists{'canhide'} = join(',',@allidx); |
$lists{'canrandomlyorder'} = join(',',@allmapidx); |
$lists{'canrandomlyorder'} = join(',',@allmapidx); |
Line 3467 sub editor {
|
Line 3988 sub editor {
|
'</td>'. |
'</td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td colspan="4">'. |
'<td colspan="2">'. |
&multiple_check_form('settings',\%lists,$canedit). |
&multiple_check_form('settings',\%lists,$canedit). |
'</td>'. |
'</td>'. |
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
Line 3536 sub multiple_check_form {
|
Line 4057 sub multiple_check_form {
|
return unless (ref($listsref) eq 'HASH'); |
return unless (ref($listsref) eq 'HASH'); |
my $disabled; |
my $disabled; |
unless ($canedit) { |
unless ($canedit) { |
$disabled = 'disabled="disabled"'; |
$disabled = ' disabled="disabled"'; |
} |
} |
my $output = |
my $output = |
'<form action="/adm/coursedocs" method="post" name="togglemult'.$caller.'">'. |
'<form action="/adm/coursedocs" method="post" name="togglemult'.$caller.'">'. |
Line 3786 sub is_supplemental_title {
|
Line 4307 sub is_supplemental_title {
|
sub entryline { |
sub entryline { |
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom, |
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom, |
$crstype,$pathitem,$supplementalflag,$container,$filtersref,$currgroups, |
$crstype,$pathitem,$supplementalflag,$container,$filtersref,$currgroups, |
$ltitoolsref,$canedit,$isencrypted,$navmapref,$hostname)=@_; |
$ltitoolsref,$canedit,$isencrypted,$ishidden,$navmapref,$hostname)=@_; |
my ($foldertitle,$renametitle,$oldtitle); |
my ($foldertitle,$renametitle,$oldtitle,$encodedtitle); |
if (&is_supplemental_title($title)) { |
if (&is_supplemental_title($title)) { |
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title); |
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title); |
|
$encodedtitle=$title; |
} else { |
} else { |
$title=&HTML::Entities::encode($title,'"<>&\''); |
$title=&HTML::Entities::encode($title,'"<>&\''); |
|
$encodedtitle=$title; |
$renametitle=$title; |
$renametitle=$title; |
$foldertitle=$title; |
$foldertitle=$title; |
} |
} |
Line 3813 sub entryline {
|
Line 4336 sub entryline {
|
my $line=&Apache::loncommon::start_data_table_row(); |
my $line=&Apache::loncommon::start_data_table_row(); |
my ($form_start,$form_end,$form_common,$form_param); |
my ($form_start,$form_end,$form_common,$form_param); |
# Edit commands |
# Edit commands |
my ($esc_path, $path, $symb); |
my ($esc_path, $path, $symb, $shownsymb); |
if ($env{'form.folderpath'}) { |
if ($env{'form.folderpath'}) { |
$esc_path=&escape($env{'form.folderpath'}); |
$esc_path=&escape($env{'form.folderpath'}); |
$path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); |
$path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); |
Line 4013 END
|
Line 4536 END
|
my $ispage; |
my $ispage; |
my $containerarg; |
my $containerarg; |
my $folderurl; |
my $folderurl; |
|
my $plainurl; |
if ($uploaded) { |
if ($uploaded) { |
if (($extension eq 'sequence') || ($extension eq 'page')) { |
if (($extension eq 'sequence') || ($extension eq 'page')) { |
$url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/; |
$url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/; |
Line 4031 END
|
Line 4555 END
|
$url='/adm/supplemental?'; |
$url='/adm/supplemental?'; |
} |
} |
} else { |
} else { |
&Apache::lonnet::allowuploaded('/adm/coursedoc',$url); |
$plainurl = $url; |
} |
} |
} |
} |
|
|
my ($editlink,$extresform,$anchor,$hiddenres,$nomodal); |
my ($editlink,$extresform,$anchor,$hiddenres,$nomodal); |
my $orig_url = $url; |
my $orig_url = $url; |
$orig_url=~s{http(:|:)//https(:|:)//}{https$2//}; |
$orig_url=~s{http(:|:)//https(:|:)//}{https$2//}; |
$url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/}; |
if ($container eq 'page') { |
|
$url=~s{^http(|s)(:|:)//}{/ext/}; |
|
} else { |
|
$url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/}; |
|
} |
if (!$supplementalflag && $residx && $symb) { |
if (!$supplementalflag && $residx && $symb) { |
if ((!$isfolder) && (!$ispage)) { |
if ((!$isfolder) && (!$ispage)) { |
(undef,undef,$url)=&Apache::lonnet::decode_symb($symb); |
(undef,undef,$url)=&Apache::lonnet::decode_symb($symb); |
$url=&Apache::lonnet::clutter($url); |
if (($url =~ m{^ext/}) && ($container eq 'page')) { |
|
$url=&Apache::lonnet::clutter_with_no_wrapper($url); |
|
} else { |
|
$url=&Apache::lonnet::clutter($url); |
|
} |
if ($url=~/^\/*uploaded\//) { |
if ($url=~/^\/*uploaded\//) { |
$url=~/\.(\w+)$/; |
$url=~/\.(\w+)$/; |
my $embstyle=&Apache::loncommon::fileembstyle($1); |
my $embstyle=&Apache::loncommon::fileembstyle($1); |
Line 4056 END
|
Line 4588 END
|
} elsif ($url=~m{^(|/adm/wrapper)/ext/([^#]+)}) { |
} elsif ($url=~m{^(|/adm/wrapper)/ext/([^#]+)}) { |
my $wrapped = $1; |
my $wrapped = $1; |
my $exturl = $2; |
my $exturl = $2; |
if ($wrapped eq '') { |
if (($wrapped eq '') && ($container ne 'page')) { |
$url='/adm/wrapper'.$url; |
$url='/adm/wrapper'.$url; |
} |
} |
if (($ENV{'SERVER_PORT'} == 443) && ($exturl !~ /^https:/)) { |
if (($ENV{'SERVER_PORT'} == 443) && ($exturl !~ /^https:/)) { |
Line 4067 END
|
Line 4599 END
|
} elsif ($url eq "/public/$coursedom/$coursenum/syllabus") { |
} elsif ($url eq "/public/$coursedom/$coursenum/syllabus") { |
if (($ENV{'SERVER_PORT'} == 443) && |
if (($ENV{'SERVER_PORT'} == 443) && |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
$url .= '?usehttp=1'; |
$url .= '?usehttp=1'; |
} |
} |
$nomodal = 1; |
$nomodal = 1; |
} |
} |
} |
} |
if (&Apache::lonnet::symbverify($symb,$url)) { |
my ($checkencrypt,$shownurl); |
my $shownsymb = $symb; |
if (!$env{'request.role.adv'}) { |
if ($isexternal) { |
|
if ($url =~ /^([^#]+)#([^#]+)$/) { |
|
$url = $1; |
|
$anchor = $2; |
|
my $escan = &escape('#'); |
|
$shownsymb =~ s/^([^\#]+)#([^\#]+)$/$1$escan$2/; |
|
} |
|
} |
|
unless ($env{'request.role.adv'}) { |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$url = ''; |
|
} |
|
if (&Apache::lonnet::EXT('resource.0.hiddenresource',$symb) =~ /^yes$/i) { |
|
$url = ''; |
|
$hiddenres = 1; |
|
} |
|
} |
|
if ($url ne '') { |
|
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($shownsymb); |
|
} |
|
} elsif (!$env{'request.role.adv'}) { |
|
my $checkencrypt; |
|
if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) || |
if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) || |
$isencrypted || (&Apache::lonnet::EXT('resource.0.encrypturl',$symb) =~ /^yes$/i)) { |
($isencrypted) || (&Apache::lonnet::EXT('resource.0.encrypturl',$symb) =~ /^yes$/i)) { |
$checkencrypt = 1; |
$checkencrypt = 1; |
} elsif (ref($navmapref)) { |
} elsif (ref($navmapref)) { |
unless (ref($$navmapref)) { |
unless (ref($$navmapref)) { |
Line 4110 END
|
Line 4620 END
|
} |
} |
} |
} |
} |
} |
if ($checkencrypt) { |
} |
my $shownsymb = &Apache::lonenc::encrypted($symb); |
if ($checkencrypt) { |
my $shownurl = &Apache::lonenc::encrypted($url); |
my $currenc = $env{'request.enc'}; |
if (&Apache::lonnet::symbverify($shownsymb,$shownurl)) { |
$env{'request.enc'} = 1; |
$url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&escape($shownsymb); |
$shownsymb = &Apache::lonenc::encrypted($symb); |
if ($env{'request.enc'} ne '') { |
$shownurl = &Apache::lonenc::encrypted($url); |
delete($env{'request.enc'}); |
if (&Apache::lonnet::symbverify($symb,$url)) { |
} |
$url = $shownurl; |
} else { |
|
$url=''; |
|
} |
|
} else { |
} else { |
$url=''; |
$url = ''; |
|
} |
|
$env{'request.enc'} = $currenc; |
|
} elsif (&Apache::lonnet::symbverify($symb,$url)) { |
|
$shownsymb = $symb; |
|
if ($isexternal) { |
|
$url =~ s/\#[^#]+$//; |
|
if ($container eq 'page') { |
|
$url = &Apache::lonnet::clutter($url); |
|
} |
|
} |
|
$shownurl = $url; |
|
} |
|
unless ($env{'request.role.adv'}) { |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$url = ''; |
|
} |
|
if (&Apache::lonnet::EXT('resource.0.hiddenresource',$symb) =~ /^yes$/i) { |
|
$url = ''; |
|
$hiddenres = 1; |
} |
} |
} else { |
} |
$url=''; |
if ($url ne '') { |
|
$url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&escape($shownsymb); |
} |
} |
} |
} |
} elsif ($supplementalflag) { |
} elsif ($supplementalflag) { |
Line 4134 END
|
Line 4661 END
|
$url = $1; |
$url = $1; |
$anchor = $2; |
$anchor = $2; |
if (($url =~ m{^(|/adm/wrapper)/ext/(?!https:)}) && ($ENV{'SERVER_PORT'} == 443)) { |
if (($url =~ m{^(|/adm/wrapper)/ext/(?!https:)}) && ($ENV{'SERVER_PORT'} == 443)) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
if ($hostname ne '') { |
if ($hostname ne '') { |
$url = 'http://'.$hostname.$url; |
$url = 'http://'.$hostname.$url; |
} |
} |
Line 4146 END
|
Line 4673 END
|
} elsif ($url =~ m{^\Q/public/$coursedom/$coursenum/syllabus\E}) { |
} elsif ($url =~ m{^\Q/public/$coursedom/$coursenum/syllabus\E}) { |
if (($ENV{'SERVER_PORT'} == 443) && |
if (($ENV{'SERVER_PORT'} == 443) && |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
if ($hostname ne '') { |
if ($hostname ne '') { |
$url = 'http://'.$hostname.$url; |
$url = 'http://'.$hostname.$url; |
} |
} |
Line 4154 END
|
Line 4681 END
|
} |
} |
$nomodal = 1; |
$nomodal = 1; |
} |
} |
|
} elsif (($uploaded) && (!$allowed) && ($url ne '/adm/supplemental?')) { |
|
my $embstyle=&Apache::loncommon::fileembstyle($extension); |
|
unless ($embstyle eq 'ssi') { |
|
if (($embstyle eq 'img') |
|
|| ($embstyle eq 'emb') |
|
|| ($embstyle eq 'wrp')) { |
|
$url='/adm/wrapper'.$url; |
|
} elsif ($url !~ /\.(sequence|page)$/) { |
|
$url='/adm/coursedocs/showdoc'.$url; |
|
} |
|
} |
|
} |
|
unless ($allowed && $env{'request.role.adv'}) { |
|
if ($ishidden || (&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$hiddenres = 1; |
|
} |
} |
} |
} |
} |
my ($rand_pick_text,$rand_order_text,$hiddenfolder); |
my ($rand_pick_text,$rand_order_text,$hiddenfolder); |
Line 4165 END
|
Line 4708 END
|
if (!$allowed && $supplementalflag) { |
if (!$allowed && $supplementalflag) { |
$folderpath.=$containerarg.'&'.$foldername; |
$folderpath.=$containerarg.'&'.$foldername; |
$url.='folderpath='.&escape($folderpath); |
$url.='folderpath='.&escape($folderpath); |
|
if ($ishidden || (&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$hiddenfolder = 1; |
|
} |
} else { |
} else { |
my $rpicknum = (&LONCAPA::map::getparameter($orderidx, |
my $rpicknum = (&LONCAPA::map::getparameter($orderidx, |
'parameter_randompick'))[0]; |
'parameter_randompick'))[0]; |
Line 4250 $form_end;
|
Line 4796 $form_end;
|
$url .= ($url =~ /\?/) ? '&':'?'; |
$url .= ($url =~ /\?/) ? '&':'?'; |
$url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"'); |
$url .= 'folderpath='.&HTML::Entities::encode($esc_path,'<>&"'); |
if ($title) { |
if ($title) { |
$url .= '&title='.&HTML::Entities::encode($renametitle,'<>&"'); |
$url .= '&title='.$encodedtitle; |
} |
} |
if ((($isexternal) || ($isexttool)) && $orderidx) { |
if ((($isexternal) || ($isexttool)) && $orderidx) { |
$url .= '&idx='.$orderidx; |
$url .= '&idx='.$orderidx; |
Line 4285 $form_end;
|
Line 4831 $form_end;
|
&Apache::lonhtmlcommon::jump_to_editres($cfile,$home, |
&Apache::lonhtmlcommon::jump_to_editres($cfile,$home, |
$switchserver, |
$switchserver, |
$forceedit, |
$forceedit, |
undef,$symb, |
undef,$symb,$shownsymb, |
&escape($env{'form.folderpath'}), |
&escape($env{'form.folderpath'}), |
$renametitle,$hostname, |
$renametitle,$hostname, |
'','',1,$suppanchor); |
'','',1,$suppanchor); |
Line 4305 $form_end;
|
Line 4851 $form_end;
|
$reinit = &mt('(re-initialize course to access)'); |
$reinit = &mt('(re-initialize course to access)'); |
} |
} |
$line.='<td class="LC_docs_entry_commands"'.$tdalign.'><span class="LC_nobreak">'.$editlink.$renamelink; |
$line.='<td class="LC_docs_entry_commands"'.$tdalign.'><span class="LC_nobreak">'.$editlink.$renamelink; |
my $link; |
my ($link,$nolink); |
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
$line.='<a href="'.$url.'"><img src="'.$icon.'" alt="" class="LC_icon" /></a>'; |
if ($allowed && !$env{'request.role.adv'} && !$isfolder && !$ispage) { |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$nolink = 1; |
|
} |
|
} |
|
if ($nolink) { |
|
$line .= '<img src="'.$icon.'" alt="" class="LC_icon" /></a>'; |
|
} else { |
|
$line.='<a href="'.$url.'"><img src="'.$icon.'" alt="" class="LC_icon" /></a>'; |
|
} |
} elsif ($url) { |
} elsif ($url) { |
if ($anchor ne '') { |
if ($anchor ne '') { |
if ($supplementalflag) { |
if ($supplementalflag) { |
Line 4316 $form_end;
|
Line 4871 $form_end;
|
$anchor = '#'.&HTML::Entities::encode($anchor,'"<>&'); |
$anchor = '#'.&HTML::Entities::encode($anchor,'"<>&'); |
} |
} |
} |
} |
|
|
if ((!$supplementalflag) && ($nomodal) && ($hostname ne '')) { |
if ((!$supplementalflag) && ($nomodal) && ($hostname ne '')) { |
$link = 'http://'.$hostname.$url; |
$link = 'http://'.$hostname.$url; |
} else { |
} else { |
$link = $url; |
$link = $url; |
} |
} |
$link = &js_escape($link.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.$anchor); |
$link = &js_escape($link.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.$anchor); |
if ($nomodal) { |
if ($allowed && !$env{'request.role.adv'} && !$isfolder && !$ispage && !$uploaded) { |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
|
$nolink = 1; |
|
} |
|
} |
|
if ($nolink) { |
|
$line.='<img src="'.$icon.'" alt="" class="LC_icon" />'; |
|
} elsif ($nomodal) { |
$line.='<a href="#" onclick="javascript:window.open('."'$link','syllabuspreview','height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1')".'; return false;" />'. |
$line.='<a href="#" onclick="javascript:window.open('."'$link','syllabuspreview','height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1')".'; return false;" />'. |
'<img src="'.$icon.'" alt="" class="LC_icon" border="0" /></a>'; |
'<img src="'.$icon.'" alt="" class="LC_icon" border="0" /></a>'; |
} else { |
} else { |
Line 4335 $form_end;
|
Line 4896 $form_end;
|
} |
} |
$line.='</span></td><td'.$tdwidth.'>'; |
$line.='</span></td><td'.$tdwidth.'>'; |
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
$line.='<a href="'.$url.'">'.$title.'</a>'; |
if ($nolink) { |
|
$line.=$title; |
|
} else { |
|
$line.='<a href="'.$url.'">'.$title.'</a>'; |
|
} |
|
if (!$allowed && $supplementalflag && $canedit && $isfolder) { |
|
my $editicon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png'; |
|
my $editurl = $url; |
|
$editurl =~ s{^\Q/adm/supplemental?\E}{/adm/coursedocs?command=direct&forcesupplement=1&}; |
|
$line .= ' '.'<a href="'.$editurl.'">'. |
|
'<img src="'.$editicon.'" alt="'.&mt('Edit Content').'" title="'.&mt('Edit Content').'" />'. |
|
'</a>'; |
|
} |
|
if ((($hiddenfolder) || ($hiddenres)) && (!$allowed) && ($supplementalflag)) { |
|
$line.= ' <span class="LC_warning">('.&mt('hidden').')</span> '; |
|
} |
} elsif ($url) { |
} elsif ($url) { |
if ($nomodal) { |
if ($nolink) { |
|
$line.=$title; |
|
} elsif ($nomodal) { |
$line.='<a href="#" onclick="javascript:window.open('."'$link','syllabuspreview','height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1')".'; return false;" />'. |
$line.='<a href="#" onclick="javascript:window.open('."'$link','syllabuspreview','height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1')".'; return false;" />'. |
$title.'</a>'; |
$title.'</a>'; |
} else { |
} else { |
Line 4351 $form_end;
|
Line 4929 $form_end;
|
$line.="$extresform</td>"; |
$line.="$extresform</td>"; |
$rand_pick_text = ' ' if ($rand_pick_text eq ''); |
$rand_pick_text = ' ' if ($rand_pick_text eq ''); |
$rand_order_text = ' ' if ($rand_order_text eq ''); |
$rand_order_text = ' ' if ($rand_order_text eq ''); |
if (($allowed) && ($folder!~/^supplemental/)) { |
if ($uploaded && $url && !$isfolder && !$ispage) { |
my %lt=&Apache::lonlocal::texthash( |
if (($plainurl ne '') && ($env{'request.role.adv'} || $allowed || !$hiddenres)) { |
'hd' => 'Hidden', |
&Apache::lonnet::allowuploaded('/adm/coursedoc',$plainurl); |
'ec' => 'URL hidden'); |
|
my ($enctext,$hidtext); |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) { |
|
$enctext = ' checked="checked"'; |
|
if (($ishash) && (ref($filtersref->{'encrypturl'}) eq 'ARRAY')) { |
|
push(@{$filtersref->{'encrypturl'}},$orderidx); |
|
} |
|
} |
} |
|
} |
|
if ($allowed) { |
|
my %lt=&Apache::lonlocal::texthash( |
|
'hd' => 'Hidden', |
|
'ec' => 'URL hidden'); |
|
my ($enctext,$hidtext,$formhidden,$formurlhidden); |
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) { |
$hidtext = ' checked="checked"'; |
$hidtext = ' checked="checked"'; |
if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) { |
if (($ishash) && (ref($filtersref->{'hiddenresource'}) eq 'ARRAY')) { |
push(@{$filtersref->{'hiddenresource'}},$orderidx); |
push(@{$filtersref->{'hiddenresource'}},$orderidx); |
} |
} |
} |
} |
my $formhidden = 'edit_hiddenresource_'.$orderidx; |
$formhidden = 'edit_hiddenresource_'.$orderidx; |
my $formurlhidden = 'edit_encrypturl_'.$orderidx; |
$line.=(<<ENDPARMS); |
$line.=(<<ENDPARMS); |
|
<td class="LC_docs_entry_parameter"> |
<td class="LC_docs_entry_parameter"> |
<form action="/adm/coursedocs" method="post" name="$formhidden"> |
<form action="/adm/coursedocs" method="post" name="$formhidden"> |
$form_param |
$form_param |
$form_common |
$form_common |
<label><input type="checkbox" name="hiddenresource_$orderidx" id="hiddenresource_$orderidx" onclick="checkForSubmit(this.form,'hiddenresource','settings');" $hidtext $disabled /> $lt{'hd'}</label> |
<label><input type="checkbox" name="hiddenresource_$orderidx" id="hiddenresource_$orderidx" onclick="checkForSubmit(this.form,'hiddenresource','settings');" $hidtext $disabled /> $lt{'hd'}</label> |
$form_end |
$form_end |
|
ENDPARMS |
|
if ($folder =~/^supplemental/) { |
|
$line.= "\n <td>"; |
|
} else { |
|
if ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) { |
|
$enctext = ' checked="checked"'; |
|
if (($ishash) && (ref($filtersref->{'encrypturl'}) eq 'ARRAY')) { |
|
push(@{$filtersref->{'encrypturl'}},$orderidx); |
|
} |
|
} |
|
$formurlhidden = 'edit_encrypturl_'.$orderidx; |
|
$line.=(<<ENDPARMS); |
<br /> |
<br /> |
<form action="/adm/coursedocs" method="post" name="$formurlhidden"> |
<form action="/adm/coursedocs" method="post" name="$formurlhidden"> |
$form_param |
$form_param |
Line 4387 $form_end;
|
Line 4975 $form_end;
|
<td class="LC_docs_entry_parameter">$rand_pick_text<br /> |
<td class="LC_docs_entry_parameter">$rand_pick_text<br /> |
$rand_order_text</td> |
$rand_order_text</td> |
ENDPARMS |
ENDPARMS |
|
} |
} |
} |
$line.=&Apache::loncommon::end_data_table_row(); |
$line.=&Apache::loncommon::end_data_table_row(); |
return $line; |
return $line; |
Line 4720 sub short_urls {
|
Line 5309 sub short_urls {
|
$r->rflush(); |
$r->rflush(); |
my $readonly; |
my $readonly; |
if ($canedit) { |
if ($canedit) { |
my ($numnew,$errors) = &Apache::loncommon::make_short_symbs($cdom,$cnum,$navmap); |
my ($numnew,$errors) = &Apache::loncommon::get_requested_shorturls($cdom,$cnum,$navmap); |
if ($numnew) { |
if ($numnew) { |
$r->print('<p class="LC_info">'.&mt('Created [quant,_1,URL]',$numnew).'</p>'); |
$r->print('<p class="LC_info">'.&mt('Created [quant,_1,URL]',$numnew).'</p>'); |
} |
} |
Line 4755 sub contentverifyform {
|
Line 5344 sub contentverifyform {
|
&mt('No').'</label>'.(' 'x2). |
&mt('No').'</label>'.(' 'x2). |
'<label><input type="radio" name="checkstale" value="1" />'. |
'<label><input type="radio" name="checkstale" value="1" />'. |
&mt('Yes').'</label></span></p><p>'. |
&mt('Yes').'</label></span></p><p>'. |
'<input type="submit" value="'.&mt('Verify content').' "/>'. |
'<input type="submit" value="'.&mt('Verify Content').' "/>'. |
'<input type="hidden" value="1" name="tools" />'. |
'<input type="hidden" value="1" name="tools" />'. |
'<input type="hidden" value="1" name="verify" /></p></form>'); |
'<input type="hidden" value="1" name="verify" /></p></form>'); |
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
Line 5112 sub changewarning {
|
Line 5701 sub changewarning {
|
if (!defined($message)) { |
if (!defined($message)) { |
$message='Changes will become active for your current session after [_1], or the next time you log in.'; |
$message='Changes will become active for your current session after [_1], or the next time you log in.'; |
} |
} |
|
my $windowname = 'loncapaclient'; |
|
if ($env{'request.lti.login'}) { |
|
$windowname .= 'lti'; |
|
} |
$r->print("\n\n". |
$r->print("\n\n". |
'<script type="text/javascript">'."\n". |
'<script type="text/javascript">'."\n". |
'// <![CDATA['."\n". |
'// <![CDATA['."\n". |
'function reinit(tf) { tf.submit();'.$postexec.' }'."\n". |
'function reinit(tf) { tf.submit();'.$postexec.' }'."\n". |
'// ]]>'."\n". |
'// ]]>'."\n". |
'</script>'."\n". |
'</script>'."\n". |
'<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'. |
'<form name="reinitform" method="post" action="/adm/roles" target="'.$windowname.'">'. |
'<input type="hidden" name="orgurl" value="'.$url. |
'<input type="hidden" name="orgurl" value="'.$url. |
'" /><input type="hidden" name="selectrole" value="1" /><p class="LC_warning">'. |
'" /><input type="hidden" name="selectrole" value="1" /><p class="LC_warning">'. |
&mt($message,' <input type="hidden" name="'. |
&mt($message,' <input type="hidden" name="'. |
Line 5214 sub handler {
|
Line 5807 sub handler {
|
# |
# |
# --------------------------------------------- Initialize help topics for this |
# --------------------------------------------- Initialize help topics for this |
foreach my $topic ('Adding_Course_Doc','Main_Course_Documents', |
foreach my $topic ('Adding_Course_Doc','Main_Course_Documents', |
'Adding_External_Resource','Adding_External_Tool', |
'Adding_External_Resource','Adding_External_Tool', |
'Navigate_Content','Adding_Folders','Docs_Overview', |
'Navigate_Content','Adding_Folders','Docs_Overview', |
'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') { |
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); |
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic); |
} |
} |
Line 5235 sub handler {
|
Line 5828 sub handler {
|
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); |
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); |
|
|
my ($allowed,$canedit,$canview,$disabled); |
my ($allowed,$canedit,$canview,$disabled); |
|
# does this user have privileges to modify content. |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
# URI is /adm/supplemental when viewing supplemental docs in non-edit mode. |
# URI is /adm/supplemental when viewing supplemental docs in non-edit mode. |
unless ($r->uri eq '/adm/supplemental') { |
unless ($r->uri eq '/adm/supplemental') { |
# does this user have privileges to modify content. |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
|
$allowed = 1; |
$allowed = 1; |
$canedit = 1; |
} |
$canview = 1; |
$canedit = 1; |
} elsif (&Apache::lonnet::allowed('cev',$env{'request.course.id'})) { |
$canview = 1; |
|
} elsif (&Apache::lonnet::allowed('cev',$env{'request.course.id'})) { |
|
# URI is /adm/supplemental when viewing supplemental docs in non-edit mode. |
|
unless ($r->uri eq '/adm/supplemental') { |
$allowed = 1; |
$allowed = 1; |
$canview = 1; |
|
} |
} |
|
$canview = 1; |
} |
} |
unless ($canedit) { |
unless ($canedit) { |
$disabled = ' disabled="disabled"'; |
$disabled = ' disabled="disabled"'; |
Line 5299 sub handler {
|
Line 5895 sub handler {
|
# Get the parameters that may be needed |
# Get the parameters that may be needed |
# |
# |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['folderpath', |
['folderpath','title', |
'forcesupplement','forcestandard', |
'forcesupplement','forcestandard', |
'tools','symb','command','supppath']); |
'tools','symb','command','supppath']); |
|
|
Line 5346 sub handler {
|
Line 5942 sub handler {
|
if ($env{'form.tools'}) { $toolsflag=1; } |
if ($env{'form.tools'}) { $toolsflag=1; } |
|
|
if ($env{'form.folderpath'} ne '') { |
if ($env{'form.folderpath'} ne '') { |
my @items = split(/\&/,$env{'form.folderpath'}); |
&Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom); |
my $badpath; |
|
for (my $i=0; $i<@items; $i++) { |
|
my $odd = $i%2; |
|
if (($odd) && (!$supplementalflag) && ($items[$i] !~ /^[^:]*:(|\d+):(|1):(|1):(|1):(|1)$/)) { |
|
$badpath = 1; |
|
} elsif ((!$odd) && ($items[$i] !~ /^(default|supplemental)(|_\d+)$/)) { |
|
$badpath = 1; |
|
} |
|
last if ($badpath); |
|
} |
|
if ($badpath) { |
|
delete($env{'form.folderpath'}); |
|
} |
|
} |
} |
|
|
|
my $backto_supppath; |
if ($env{'form.supppath'} ne '') { |
if ($env{'form.supppath'} ne '') { |
my @items = split(/\&/,$env{'form.supppath'}); |
if ($supplementalflag && $allowed) { |
my $badpath; |
$backto_supppath = &validate_supppath($coursenum,$coursedom); |
for (my $i=0; $i<@items; $i++) { |
|
my $odd = $i%2; |
|
if ((!$odd) && ($items[$i] !~ /^supplemental(|_\d+)$/)) { |
|
$badpath = 1; |
|
} |
|
last if ($badpath); |
|
} |
|
if ($badpath) { |
|
delete($env{'form.supppath'}); |
|
} |
} |
} |
} |
|
|
Line 5384 sub handler {
|
Line 5959 sub handler {
|
my $containertag; |
my $containertag; |
my $pathitem; |
my $pathitem; |
my %ltitools; |
my %ltitools; |
|
my $posslti; |
my $hiddentop; |
my $hiddentop; |
my $navmap; |
my $navmap; |
my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) }; |
my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) }; |
Line 5395 sub handler {
|
Line 5971 sub handler {
|
&Apache::loncommon::symb_to_docspath($env{'form.symb'},\$navmap); |
&Apache::loncommon::symb_to_docspath($env{'form.symb'},\$navmap); |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
$env{'form.command'}.'_'.$env{'form.symb'}}); |
$env{'form.command'}.'_'.$env{'form.symb'}}); |
} elsif ($env{'form.supppath'} ne '') { |
} elsif (($env{'form.supppath'} ne '') && $supplementalflag && $allowed) { |
$env{'form.folderpath'}=$env{'form.supppath'}; |
$env{'form.folderpath'}=$env{'form.supppath'}; |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
$env{'form.command'}.'_'.$env{'form.supppath'}}); |
$env{'form.command'}.'_'.$backto_supppath}); |
} |
} |
} elsif ($env{'form.command'} eq 'editdocs') { |
} elsif ($env{'form.command'} eq 'editdocs') { |
$env{'form.folderpath'} = &default_folderpath($coursenum,$coursedom,\$navmap); |
$env{'form.folderpath'} = &default_folderpath($coursenum,$coursedom,\$navmap); |
Line 5433 sub handler {
|
Line 6009 sub handler {
|
} else { |
} else { |
undef($env{'form.folderpath'}); |
undef($env{'form.folderpath'}); |
} |
} |
|
if ($env{'form.folderpath'} ne '') { |
|
&Apache::loncommon::validate_folderpath($supplementalflag,$allowed,$coursenum,$coursedom); |
|
} |
} |
} |
|
|
# If we are not allowed to make changes, all we can see are supplemental docs |
# If we are not allowed to make changes, all we can see are supplemental docs |
Line 5448 sub handler {
|
Line 6027 sub handler {
|
$env{'form.folderpath'}; |
$env{'form.folderpath'}; |
} |
} |
# If allowed and user's role is not advanced check folderpath is not hidden |
# If allowed and user's role is not advanced check folderpath is not hidden |
if (($allowed) && (!$env{'request.role.adv'}) && |
my $hidden_and_empty; |
($env{'form.folderpath'} ne '') && (!$supplementalflag)) { |
if (($allowed) && (!$env{'request.role.adv'}) && ($env{'form.folderpath'} ne '')) { |
my $folderurl; |
my ($folderurl,$foldername,$hiddenfolder); |
my @pathitems = split(/\&/,$env{'form.folderpath'}); |
my @pathitems = split(/\&/,$env{'form.folderpath'}); |
my $folder = $pathitems[-2]; |
my $folder = $pathitems[-2]; |
if ($folder eq '') { |
if ($folder eq '') { |
undef($env{'form.folderpath'}); |
undef($env{'form.folderpath'}); |
} else { |
} else { |
$folderurl = "uploaded/$coursedom/$coursenum/$folder"; |
$folderurl = "uploaded/$coursedom/$coursenum/$folder"; |
if ((split(/\:/,$pathitems[-1]))[4]) { |
if ((split(/\:/,$pathitems[-1]))[5]) { |
$folderurl .= '.page'; |
$folderurl .= '.page'; |
} else { |
} else { |
$folderurl .= '.sequence'; |
$folderurl .= '.sequence'; |
} |
} |
unless (ref($navmap)) { |
if ($supplementalflag) { |
$navmap = Apache::lonnavmaps::navmap->new(); |
($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*)::(|1):::$/); |
} |
$foldername = &HTML::Entities::decode(&unescape($foldername)); |
if (ref($navmap)) { |
my ($supplemental) = &Apache::loncommon::get_supplemental($coursenum,$coursedom); |
if (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') { |
if (ref($supplemental) eq 'HASH') { |
my @resources = $navmap->retrieveResources($folderurl,$filterFunc,1,1); |
my ($suppmap,$suppmapnum); |
unless (@resources) { |
if ($folder eq 'supplemental') { |
undef($env{'form.folderpath'}); |
$suppmap = 'default'; |
|
$suppmapnum = 0; |
|
} elsif ($folder =~ /^supplemental_(\d+)$/) { |
|
$suppmap = $1; |
|
$suppmapnum = $suppmap; |
|
} |
|
if ($hiddenfolder) { |
|
my $hascontent; |
|
foreach my $key (reverse(sort(keys(%{$supplemental->{'ids'}})))) { |
|
if ($key =~ m{^\Q/uploaded/$coursedom/$coursenum/supplemental/$suppmap/\E}) { |
|
$hascontent = 1; |
|
} elsif (ref($supplemental->{'ids'}->{$key}) eq 'ARRAY') { |
|
foreach my $id (@{$supplemental->{'ids'}->{$key}}) { |
|
if ($id =~ /^$suppmapnum\:/) { |
|
$hascontent = 1; |
|
last; |
|
} |
|
} |
|
} |
|
last if ($hascontent); |
|
} |
|
unless ($hascontent) { |
|
if ($foldername ne '') { |
|
$hidden_and_empty = $foldername; |
|
} else { |
|
$hidden_and_empty = $folder; |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
unless (ref($navmap)) { |
|
$navmap = Apache::lonnavmaps::navmap->new(); |
|
} |
|
($foldername,$hiddenfolder) = ($pathitems[-1] =~ /^([^:]*):|\d+:|1:(|1):|1:|1$/); |
|
$foldername = &HTML::Entities::decode(&unescape($foldername)); |
|
if (ref($navmap)) { |
|
if ($hiddenfolder || |
|
(lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes')) { |
|
my @resources = $navmap->retrieveResources($folderurl,$filterFunc,1,1); |
|
unless (@resources) { |
|
if ($foldername ne '') { |
|
$hidden_and_empty = $foldername; |
|
} else { |
|
$hidden_and_empty = $folder; |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
|
if ($hidden_and_empty ne '') { |
|
splice(@pathitems,-2); |
|
if (@pathitems) { |
|
$env{'form.folderpath'} = join('&',@pathitems); |
|
} else { |
|
undef($env{'form.folderpath'}); |
|
} |
|
} |
} |
} |
} |
} |
|
|
|
|
# If after all of this, we still don't have any paths, make them |
# If after all of this, we still don't have any paths, make them |
unless ($env{'form.folderpath'}) { |
unless ($env{'form.folderpath'}) { |
if ($supplementalflag) { |
if ($supplementalflag) { |
Line 5561 sub handler {
|
Line 6193 sub handler {
|
} |
} |
} |
} |
my $tabidstr = join("','",@tabids); |
my $tabidstr = join("','",@tabids); |
%ltitools = &Apache::lonnet::get_domain_ltitools($coursedom); |
my (%domtools,%crstools); |
my $posslti = keys(%ltitools); |
my %tooltypes = &Apache::loncommon::usable_exttools(); |
|
if ($tooltypes{'dom'}) { |
|
%domtools = &Apache::lonnet::get_domain_lti($coursedom,'consumer'); |
|
} |
|
if ($tooltypes{'crs'}) { |
|
%crstools = &Apache::lonnet::get_course_lti($coursenum,$coursedom,'consumer'); |
|
} |
|
%ltitools = ( |
|
dom => \%domtools, |
|
crs => \%crstools, |
|
); |
|
$posslti = scalar(keys(%domtools)) + scalar(keys(%crstools)); |
my $hostname = $r->hostname(); |
my $hostname = $r->hostname(); |
$script .= &editing_js($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti, |
$script .= &editing_js($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti, |
$canedit,$hostname,\$navmap). |
$canedit,$hostname,\$navmap). |
Line 5570 sub handler {
|
Line 6213 sub handler {
|
&inject_data_js(). |
&inject_data_js(). |
&Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid). |
&Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid). |
&Apache::lonextresedit::extedit_javascript(\%ltitools); |
&Apache::lonextresedit::extedit_javascript(\%ltitools); |
|
my $onload = "javascript:resize_scrollbox('contentscroll','1','1');"; |
|
if ($hidden_and_empty ne '') { |
|
my $alert = &mt("Additional privileges required to edit empty and hidden folder: '[_1]'", |
|
$hidden_and_empty); |
|
$onload .= "javascript:alert('".&js_escape($alert)."');"; |
|
} |
$addentries = { |
$addentries = { |
onload => "javascript:resize_scrollbox('contentscroll','1','1');", |
onload => $onload, |
}; |
}; |
} |
} |
$script .= &paste_popup_js(); |
$script .= &paste_popup_js(); |
Line 5592 sub handler {
|
Line 6241 sub handler {
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
|
if ($showdoc) { |
if ($showdoc) { |
$r->print(&Apache::loncommon::start_page("$crstype documents",undef, |
my $args; |
{'force_register' => $showdoc,})); |
if ($supplementalflag) { |
|
my $title = &HTML::Entities::encode($env{'form.title'},'\'"<>&'); |
|
my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
|
$args = {'bread_crumbs' => $brcrum}; |
|
} else { |
|
$args = {'force_register' => $showdoc}; |
|
} |
|
$r->print(&Apache::loncommon::start_page("$crstype documents",undef,$args)); |
} elsif ($toolsflag) { |
} elsif ($toolsflag) { |
my ($breadtext,$breadtitle); |
my ($breadtext,$breadtitle); |
$breadtext = "$crstype Editor"; |
$breadtext = "$crstype Editor"; |
Line 5611 sub handler {
|
Line 6267 sub handler {
|
$breadtitle) |
$breadtitle) |
); |
); |
} elsif ($r->uri eq '/adm/supplemental') { |
} elsif ($r->uri eq '/adm/supplemental') { |
|
unless ($env{'request.role.adv'}) { |
|
unless (&Apache::lonnet::has_unhidden_suppfiles($coursenum,$coursedom)) { |
|
$r->internal_redirect('/adm/navmaps'); |
|
return OK; |
|
} |
|
} |
my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype); |
my $brcrum = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype); |
$r->print(&Apache::loncommon::start_page("Supplemental $crstype Content",undef, |
$r->print(&Apache::loncommon::start_page("Supplemental $crstype Content",undef, |
{'bread_crumbs' => $brcrum,})); |
{'bread_crumbs' => $brcrum,})); |
Line 5641 sub handler {
|
Line 6303 sub handler {
|
my %codebase = (); |
my %codebase = (); |
my ($upload_result,$upload_output,$uploadphase); |
my ($upload_result,$upload_output,$uploadphase); |
if ($canedit) { |
if ($canedit) { |
|
undef($suppchanges); |
if (($env{'form.uploaddoc.filename'}) && |
if (($env{'form.uploaddoc.filename'}) && |
($env{'form.cmd'}=~/^upload_(\w+)/)) { |
($env{'form.cmd'}=~/^upload_(\w+)/)) { |
my $context = $1; |
my $context = $1; |
Line 5652 sub handler {
|
Line 6315 sub handler {
|
if ($hadchanges) { |
if ($hadchanges) { |
&mark_hash_old(); |
&mark_hash_old(); |
} |
} |
|
if ($suppchanges) { |
|
&Apache::lonnet::update_supp_caches($coursedom,$coursenum); |
|
undef($suppchanges); |
|
} |
$r->print($upload_output); |
$r->print($upload_output); |
} elsif ($env{'form.phase'} eq 'upload_embedded') { |
} elsif ($env{'form.phase'} eq 'upload_embedded') { |
# Process file upload - phase two - upload embedded objects |
# Process file upload - phase two - upload embedded objects |
Line 5706 sub handler {
|
Line 6373 sub handler {
|
'lnks' => 'Import from Stored Links', |
'lnks' => 'Import from Stored Links', |
'impm' => 'Import from Assembled Map', |
'impm' => 'Import from Assembled Map', |
'extr' => 'External Resource', |
'extr' => 'External Resource', |
'extt' => 'External Tool', |
'extt' => 'External Tool', |
'selm' => 'Select Map', |
'selm' => 'Select Map', |
'load' => 'Load Map', |
'load' => 'Load Map', |
'newf' => 'New Folder', |
'newf' => 'New Folder', |
Line 5773 sub handler {
|
Line 6440 sub handler {
|
my $fileupload=(<<FIUP); |
my $fileupload=(<<FIUP); |
$quotainfo |
$quotainfo |
$lt{'file'}:<br /> |
$lt{'file'}:<br /> |
<input type="file" name="uploaddoc" class="LC_flUpload" size="40" $disabled /> |
|
<input type="hidden" id="LC_free_space" value="$free_space" /> |
|
FIUP |
FIUP |
|
|
my $checkbox=(<<CHBO); |
my $checkbox=(<<CHBO); |
<!-- <label>$lt{'parse'}? |
<!-- <label>$lt{'parse'}? |
<input type="checkbox" name="parserflag" /> |
<input type="checkbox" name="parserflag" /> |
Line 5796 CHBO
|
Line 6460 CHBO
|
<fieldset id="uploadimsform" style="display: none;"> |
<fieldset id="uploadimsform" style="display: none;"> |
<legend>$lt{'imsf'}</legend> |
<legend>$lt{'imsf'}</legend> |
$fileupload |
$fileupload |
|
<input type="file" name="uploaddoc" id="uploaddocims" class="LC_flUpload LC_uploaddoc" size="40" $disabled /> |
|
<input type="hidden" id="LC_free_space_ims" value="$free_space" /> |
<br /> |
<br /> |
<p> |
<p> |
$lt{'cms'}: |
$lt{'cms'}: |
Line 5822 IMSFORM
|
Line 6488 IMSFORM
|
<legend>$lt{'upfi'}</legend> |
<legend>$lt{'upfi'}</legend> |
<input type="hidden" name="active" value="aa" /> |
<input type="hidden" name="active" value="aa" /> |
$fileupload |
$fileupload |
|
<input type="file" name="uploaddoc" class="LC_flUpload" size="40" $disabled /> |
|
<input type="hidden" id="LC_free_space" value="$free_space" /> |
<br /> |
<br /> |
$lt{'title'}:<br /> |
$lt{'title'}:<br /> |
<input type="text" size="60" name="comment" $disabled /> |
<input type="text" size="60" name="comment" $disabled /> |
Line 5940 HIDDENFORM
|
Line 6608 HIDDENFORM
|
} |
} |
my $postexec=''; |
my $postexec=''; |
if ($folder eq 'default') { |
if ($folder eq 'default') { |
|
my $windowname = 'loncapaclient'; |
|
if ($env{'request.lti.login'}) { |
|
$windowname .= 'lti'; |
|
} |
$r->print('<script type="text/javascript">'."\n" |
$r->print('<script type="text/javascript">'."\n" |
.'// <![CDATA['."\n" |
.'// <![CDATA['."\n" |
.'this.window.name="loncapaclient";'."\n" |
.'this.window.name="$windowname";'."\n" |
.'// ]]>'."\n" |
.'// ]]>'."\n" |
.'</script>'."\n" |
.'</script>'."\n" |
); |
); |
Line 6119 NSYLFORM
|
Line 6791 NSYLFORM
|
$help{'Group Portfolio'} |
$help{'Group Portfolio'} |
</form> |
</form> |
NGFFORM |
NGFFORM |
@specialdocumentsforma=( |
if ($container eq 'page') { |
|
@specialdocumentsforma=( |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/webpage.png" alt="'.$lt{webp}.'" onclick="javascript:makewebpage();" />'=>$newwebpageform}, |
|
); |
|
} else { |
|
@specialdocumentsforma=( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'" onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'" onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="javascript:makenew(document.newsyl);" />'=>$newsylform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="javascript:makenew(document.newsyl);" />'=>$newsylform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="javascript:makenew(document.newnav);" />'=>$newnavform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="javascript:makenew(document.newnav);" />'=>$newnavform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/webpage.png" alt="'.$lt{webp}.'" onclick="javascript:makewebpage();" />'=>$newwebpageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/webpage.png" alt="'.$lt{webp}.'" onclick="javascript:makewebpage();" />'=>$newwebpageform}, |
); |
); |
|
} |
$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma)); |
$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma)); |
|
|
|
|
my @importdoc = ( |
my @importdoc = ( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="toggleUpload(\'ext\');" />'=>$extresourcesform} |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="toggleUpload(\'ext\');" />'=>$extresourcesform} |
); |
); |
if (keys(%ltitools)) { |
if ($posslti) { |
push(@importdoc, |
push(@importdoc, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/exttool.png" alt="'.$lt{extt}.'" onclick="toggleUpload(\'tool\');" />'=>$exttoolform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/exttool.png" alt="'.$lt{extt}.'" onclick="toggleUpload(\'tool\');" />'=>$exttoolform}, |
); |
); |
Line 6168 my %orderhash = (
|
Line 6846 my %orderhash = (
|
'aa' => ['Upload',$fileuploadform], |
'aa' => ['Upload',$fileuploadform], |
'bb' => ['Import',$importpubform], |
'bb' => ['Import',$importpubform], |
'cc' => ['Grading',$gradingform], |
'cc' => ['Grading',$gradingform], |
|
'ee' => ['Other',$specialdocumentsform], |
); |
); |
unless ($container eq 'page') { |
unless ($container eq 'page') { |
$orderhash{'00'} = ['Newfolder',$newfolderform]; |
$orderhash{'00'} = ['Newfolder',$newfolderform]; |
$orderhash{'dd'} = ['Collaboration',$communityform]; |
$orderhash{'dd'} = ['Collaboration',$communityform]; |
$orderhash{'ee'} = ['Other',$specialdocumentsform]; |
|
} |
} |
|
|
$hadchanges=0; |
$hadchanges=0; |
Line 6200 unless ($container eq 'page') {
|
Line 6878 unless ($container eq 'page') {
|
unless ($supplementalflag) { |
unless ($supplementalflag) { |
$folder='supplemental'; |
$folder='supplemental'; |
} |
} |
if ($folder =~ /^supplemental$/ && |
if (($folder eq 'supplemental') && |
(($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) { |
(($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) { |
$env{'form.folderpath'} = &supplemental_base(); |
$env{'form.folderpath'} = &supplemental_base(); |
} elsif ($allowed) { |
} elsif ($allowed) { |
Line 6220 unless ($container eq 'page') {
|
Line 6898 unless ($container eq 'page') {
|
<legend>$lt{'upfi'}</legend> |
<legend>$lt{'upfi'}</legend> |
<input type="hidden" name="active" value="ee" /> |
<input type="hidden" name="active" value="ee" /> |
$fileupload |
$fileupload |
|
<input type="file" name="uploaddoc" id="uploaddocsupp" class="LC_flUpload LC_uploaddoc" size="40" $disabled /> |
|
<input type="hidden" id="LC_free_space_supp" value="$free_space" /> |
<br /> |
<br /> |
<br /> |
<br /> |
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
Line 6232 unless ($container eq 'page') {
|
Line 6912 unless ($container eq 'page') {
|
$pathitem |
$pathitem |
<input type="hidden" name="cmd" value="upload_supplemental" /> |
<input type="hidden" name="cmd" value="upload_supplemental" /> |
<input type='submit' value="$lt{'upld'}" /> |
<input type='submit' value="$lt{'upld'}" /> |
|
</fieldset> |
</form> |
</form> |
SUPDOCFORM |
SUPDOCFORM |
|
|
Line 6326 my %suporderhash = (
|
Line 7007 my %suporderhash = (
|
'ff' => ['Other',&create_form_ul(&create_list_elements(@specialdocs))] |
'ff' => ['Other',&create_form_ul(&create_list_elements(@specialdocs))] |
); |
); |
if ($supplementalflag) { |
if ($supplementalflag) { |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
$suppchanges = 0; |
$supplementalflag,\%suporderhash,$iconpath,$pathitem, |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
\%ltitools,$canedit,$hostname); |
$supplementalflag,\%suporderhash,$iconpath,$pathitem, |
if ($error) { |
\%ltitools,$canedit,$hostname); |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
if ($error) { |
} else { |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
if ($suppchanges) { |
} |
my %servers = &Apache::lonnet::internet_dom_servers($coursedom); |
if ($suppchanges) { |
my @ids=&Apache::lonnet::current_machine_ids(); |
&Apache::lonnet::update_supp_caches($coursedom,$coursenum); |
foreach my $server (keys(%servers)) { |
undef($suppchanges); |
next if (grep(/^\Q$server\E$/,@ids)); |
} |
my $hashid=$coursenum.':'.$coursedom; |
|
my $cachekey = &escape('suppcount').':'.&escape($hashid); |
|
&Apache::lonnet::remote_devalidate_cache($server,[$cachekey]); |
|
} |
|
&Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1); |
|
undef($suppchanges); |
|
} |
|
} |
|
} |
} |
} elsif ($supplementalflag) { |
} elsif ($supplementalflag) { |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
$supplementalflag,'',$iconpath,$pathitem,'',$hostname); |
$supplementalflag,'',$iconpath,$pathitem,'',$canedit, |
|
$hostname); |
if ($error) { |
if ($error) { |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
} |
} |
Line 6510 sub remove_archive {
|
Line 7184 sub remove_archive {
|
if ($url eq $env{'form.archiveurl'}) { |
if ($url eq $env{'form.archiveurl'}) { |
if (&handle_edit_cmd($docuname,$docudom)) { |
if (&handle_edit_cmd($docuname,$docudom)) { |
($errtext,$fatal) = &storemap($docuname,$docudom,$map,1); |
($errtext,$fatal) = &storemap($docuname,$docudom,$map,1); |
|
if ($suppchanges) { |
|
&Apache::lonnet::update_supp_caches($docudom,$docuname); |
|
undef($suppchanges); |
|
} |
if ($fatal) { |
if ($fatal) { |
if ($container eq 'page') { |
if ($container eq 'page') { |
$delwarning = &mt('An error occurred updating the contents of the current page.'); |
$delwarning = &mt('An error occurred updating the contents of the current page.'); |
Line 6819 sub editing_js {
|
Line 7497 sub editing_js {
|
if ($backtourl =~ m{^\Q/public/$coursedom/$coursenum/syllabus\E}) { |
if ($backtourl =~ m{^\Q/public/$coursedom/$coursenum/syllabus\E}) { |
if (($ENV{'SERVER_PORT'} == 443) && |
if (($ENV{'SERVER_PORT'} == 443) && |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
if ($hostname ne '') { |
if ($hostname ne '') { |
$backtourl = 'http://'.$hostname.$backtourl; |
$backtourl = 'http://'.$hostname.$backtourl; |
} |
} |
Line 6828 sub editing_js {
|
Line 7506 sub editing_js {
|
} |
} |
} elsif ($backtourl =~ m{^/adm/wrapper/ext/(?!https:)}) { |
} elsif ($backtourl =~ m{^/adm/wrapper/ext/(?!https:)}) { |
if (($ENV{'SERVER_PORT'} == 443) && ($hostname ne '')) { |
if (($ENV{'SERVER_PORT'} == 443) && ($hostname ne '')) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
if ($hostname ne '') { |
if ($hostname ne '') { |
$backtourl = 'http://'.$hostname.$backtourl; |
$backtourl = 'http://'.$hostname.$backtourl; |
} |
} |
Line 6847 sub editing_js {
|
Line 7525 sub editing_js {
|
} elsif ($env{'docs.exit.'.$env{'request.course.id'}} eq '/adm/menu') { |
} elsif ($env{'docs.exit.'.$env{'request.course.id'}} eq '/adm/menu') { |
$backtourl = '/adm/menu'; |
$backtourl = '/adm/menu'; |
} elsif ($supplementalflag) { |
} elsif ($supplementalflag) { |
$backtourl = '/adm/supplemental'; |
if (($env{'request.role.adv'}) || |
|
(&Apache::lonnet::has_unhidden_suppfiles($coursenum,$coursedom))) { |
|
$backtourl = '/adm/supplemental'; |
|
} else { |
|
$backtourl = '/adm/navmaps'; |
|
} |
} else { |
} else { |
$backtourl = '/adm/navmaps'; |
$backtourl = '/adm/navmaps'; |
} |
} |
Line 6872 sub editing_js {
|
Line 7555 sub editing_js {
|
function makenewfolder(targetform,folderseq) { |
function makenewfolder(targetform,folderseq) { |
var foldername=prompt('$js_lt{"p_mnf"}','$js_lt{"t_mnf"}'); |
var foldername=prompt('$js_lt{"p_mnf"}','$js_lt{"t_mnf"}'); |
if (foldername) { |
if (foldername) { |
targetform.importdetail.value=escape(foldername)+"="+folderseq; |
targetform.importdetail.value=encodeURIComponent(foldername)+"="+folderseq; |
targetform.submit(); |
targetform.submit(); |
} |
} |
} |
} |
Line 6880 function makenewfolder(targetform,folder
|
Line 7563 function makenewfolder(targetform,folder
|
function makenewpage(targetform,folderseq) { |
function makenewpage(targetform,folderseq) { |
var pagename=prompt('$js_lt{"p_mnp"}','$js_lt{"t_mnp"}'); |
var pagename=prompt('$js_lt{"p_mnp"}','$js_lt{"t_mnp"}'); |
if (pagename) { |
if (pagename) { |
targetform.importdetail.value=escape(pagename)+"="+folderseq; |
targetform.importdetail.value=encodeURIComponent(pagename)+"="+folderseq; |
targetform.submit(); |
targetform.submit(); |
} |
} |
} |
} |
Line 6889 function makeexamupload() {
|
Line 7572 function makeexamupload() {
|
var title=prompt('$js_lt{"p_mxu"}'); |
var title=prompt('$js_lt{"p_mxu"}'); |
if (title) { |
if (title) { |
this.document.forms.newexamupload.importdetail.value= |
this.document.forms.newexamupload.importdetail.value= |
escape(title)+'=/res/lib/templates/examupload.problem'; |
encodeURIComponent(title)+'=/res/lib/templates/examupload.problem'; |
this.document.forms.newexamupload.submit(); |
this.document.forms.newexamupload.submit(); |
} |
} |
} |
} |
Line 6898 function makesmppage() {
|
Line 7581 function makesmppage() {
|
var title=prompt('$js_lt{"p_msp"}'); |
var title=prompt('$js_lt{"p_msp"}'); |
if (title) { |
if (title) { |
this.document.forms.newsmppg.importdetail.value= |
this.document.forms.newsmppg.importdetail.value= |
escape(title)+'=/adm/$udom/$uname/new/smppg'; |
encodeURIComponent(title)+'=/adm/$udom/$uname/new/smppg'; |
this.document.forms.newsmppg.submit(); |
this.document.forms.newsmppg.submit(); |
} |
} |
} |
} |
Line 6913 function makewebpage(type) {
|
Line 7596 function makewebpage(type) {
|
} |
} |
if (title) { |
if (title) { |
var webpage = formname.importdetail.value; |
var webpage = formname.importdetail.value; |
formname.importdetail.value = escape(title)+'='+webpage; |
formname.importdetail.value = encodeURIComponent(title)+'='+webpage; |
formname.submit(); |
formname.submit(); |
} |
} |
} |
} |
Line 6922 function makesmpproblem() {
|
Line 7605 function makesmpproblem() {
|
var title=prompt('$js_lt{"p_msb"}'); |
var title=prompt('$js_lt{"p_msb"}'); |
if (title) { |
if (title) { |
this.document.forms.newsmpproblem.importdetail.value= |
this.document.forms.newsmpproblem.importdetail.value= |
escape(title)+'=/res/lib/templates/simpleproblem.problem'; |
encodeURIComponent(title)+'=/res/lib/templates/simpleproblem.problem'; |
this.document.forms.newsmpproblem.submit(); |
this.document.forms.newsmpproblem.submit(); |
} |
} |
} |
} |
Line 6931 function makedropbox() {
|
Line 7614 function makedropbox() {
|
var title=prompt('$js_lt{"p_mdb"}'); |
var title=prompt('$js_lt{"p_mdb"}'); |
if (title) { |
if (title) { |
this.document.forms.newdropbox.importdetail.value= |
this.document.forms.newdropbox.importdetail.value= |
escape(title)+'=/res/lib/templates/DropBox.problem'; |
encodeURIComponent(title)+'=/res/lib/templates/DropBox.problem'; |
this.document.forms.newdropbox.submit(); |
this.document.forms.newdropbox.submit(); |
} |
} |
} |
} |
Line 6940 function makebulboard() {
|
Line 7623 function makebulboard() {
|
var title=prompt('$js_lt{"p_mbb"}'); |
var title=prompt('$js_lt{"p_mbb"}'); |
if (title) { |
if (title) { |
this.document.forms.newbul.importdetail.value= |
this.document.forms.newbul.importdetail.value= |
escape(title)+'=/adm/$udom/$uname/new/bulletinboard'; |
encodeURIComponent(title)+'=/adm/$udom/$uname/new/bulletinboard'; |
this.document.forms.newbul.submit(); |
this.document.forms.newbul.submit(); |
} |
} |
} |
} |