version 1.299, 2021/06/04 03:06:15
|
version 1.304, 2024/06/01 22:25:23
|
Line 329 string which presents the form field (fo
|
Line 329 string which presents the form field (fo
|
######################################### |
######################################### |
######################################### |
######################################### |
sub textfield { |
sub textfield { |
my ($title,$name,$value,$noline)=@_; |
my ($title,$name,$value,$noline,$readonly)=@_; |
$value=~s/^\s+//gs; |
$value=~s/^\s+//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+/ /gs; |
$value=~s/\s+/ /gs; |
Line 341 sub textfield {
|
Line 341 sub textfield {
|
} |
} |
|
|
sub text_with_browse_field { |
sub text_with_browse_field { |
my ($title,$name,$value,$restriction,$noline)=@_; |
my ($title,$name,$value,$restriction,$noline,$readonly)=@_; |
$value=~s/^\s+//gs; |
$value=~s/^\s+//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+/ /gs; |
$value=~s/\s+/ /gs; |
$title=&mt($title); |
$title=&mt($title); |
$env{'form.'.$name}=$value; |
$env{'form.'.$name}=$value; |
return "\n".&Apache::lonhtmlcommon::row_title($title) |
my $disabled; |
.'<input type="text" name="'.$name.'" size="80" value="'.$value.'" />' |
if ($readonly) { |
.'<br />' |
$disabled = ' disabled="disabled"'; |
|
} |
|
my $output = |
|
"\n".&Apache::lonhtmlcommon::row_title($title) |
|
.'<input type="text" name="'.$name.'" size="80" value="'.$value.'"'.$disabled.' />'; |
|
unless ($readonly) { |
|
$output .= |
|
'<br />' |
.'<a href="javascript:openbrowser(\'pubform\',\''.$name.'\',\''.$restriction.'\');">' |
.'<a href="javascript:openbrowser(\'pubform\',\''.$name.'\',\''.$restriction.'\');">' |
.&mt('Select') |
.&mt('Select') |
.'</a> ' |
.'</a> ' |
.'<a href="javascript:opensearcher(\'pubform\',\''.$name.'\');">' |
.'<a href="javascript:opensearcher(\'pubform\',\''.$name.'\');">' |
.&mt('Search') |
.&mt('Search') |
.'</a>' |
.'</a>'; |
.&Apache::lonhtmlcommon::row_closure($noline); |
} |
|
$output .= &Apache::lonhtmlcommon::row_closure($noline); |
|
return $output; |
} |
} |
|
|
sub hiddenfield { |
sub hiddenfield { |
Line 372 sub checkbox {
|
Line 381 sub checkbox {
|
} |
} |
|
|
sub selectbox { |
sub selectbox { |
my ($title,$name,$value,$functionref,@idlist)=@_; |
my ($title,$name,$value,$readonly,$functionref,@idlist)=@_; |
$title=&mt($title); |
$title=&mt($title); |
$value=(split(/\s*,\s*/,$value))[-1]; |
$value=(split(/\s*,\s*/,$value))[-1]; |
if (defined($value)) { |
if (defined($value)) { |
Line 387 sub selectbox {
|
Line 396 sub selectbox {
|
if ($id eq $value) { |
if ($id eq $value) { |
$selout.=' selected="selected"'; |
$selout.=' selected="selected"'; |
} |
} |
|
if ($readonly) { |
|
$selout .= ' disabled="disabled"'; |
|
} |
$selout.='>'.&{$functionref}($id).'</option>'; |
$selout.='>'.&{$functionref}($id).'</option>'; |
} |
} |
$selout.='</select>'.&Apache::lonhtmlcommon::row_closure(); |
$selout.='</select>'.&Apache::lonhtmlcommon::row_closure(); |
Line 1199 sub publish {
|
Line 1211 sub publish {
|
$content=$outstring; |
$content=$outstring; |
|
|
} |
} |
|
|
|
# ----------------------------------------------------- Course Authoring Space. |
|
my ($courseauthor,$crsaurights,$readonly); |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $docroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
|
if ($source =~ m{^\Q$docroot/priv/$cdom/$cnum/\E}) { |
|
$courseauthor = $cnum.':'.$cdom; |
|
$crsaurights = "/res/$cdom/$cnum/default.rights"; |
|
$readonly = 1; |
|
} |
|
} |
|
|
# -------------------------------------------- Initial step done, now metadata. |
# -------------------------------------------- Initial step done, now metadata. |
|
|
# --------------------------------------- Storage for metadata keys and fields. |
# --------------------------------------- Storage for metadata keys and fields. |
Line 1485 END
|
Line 1511 END
|
$defaultlanguage =~ s/,\s*$//g; |
$defaultlanguage =~ s/,\s*$//g; |
|
|
$intr_scrout.=&selectbox('Language','language', |
$intr_scrout.=&selectbox('Language','language', |
$defaultlanguage, |
$defaultlanguage,'', |
\&Apache::loncommon::languagedescription, |
\&Apache::loncommon::languagedescription, |
(&Apache::loncommon::languageids), |
(&Apache::loncommon::languageids), |
); |
); |
Line 1502 END
|
Line 1528 END
|
if ($style eq 'prv') { |
if ($style eq 'prv') { |
$pubowner_last = 1; |
$pubowner_last = 1; |
} |
} |
|
if ($courseauthor) { |
|
$metadatafields{'owner'} = $courseauthor; |
|
} |
$intr_scrout.=&textfield('Publisher/Owner','owner', |
$intr_scrout.=&textfield('Publisher/Owner','owner', |
$metadatafields{'owner'},$pubowner_last); |
$metadatafields{'owner'},$pubowner_last,$readonly); |
|
|
# ---------------------------------------------- Retrofix for unused copyright |
# ---------------------------------------------- Retrofix for unused copyright |
if ($metadatafields{'copyright'} eq 'free') { |
if ($metadatafields{'copyright'} eq 'free') { |
Line 1516 END
|
Line 1545 END
|
# ------------------------------------------------ Dial in reasonable defaults |
# ------------------------------------------------ Dial in reasonable defaults |
my $defaultoption=$metadatafields{'copyright'}; |
my $defaultoption=$metadatafields{'copyright'}; |
unless ($defaultoption) { $defaultoption='default'; } |
unless ($defaultoption) { $defaultoption='default'; } |
|
if ($courseauthor) { |
|
$defaultoption='custom'; |
|
$metadatafields{'customdistributionfile'}=$crsaurights; |
|
} |
my $defaultsourceoption=$metadatafields{'sourceavail'}; |
my $defaultsourceoption=$metadatafields{'sourceavail'}; |
unless ($defaultsourceoption) { $defaultsourceoption='closed'; } |
unless ($defaultsourceoption) { $defaultsourceoption='closed'; } |
unless ($style eq 'prv') { |
unless ($style eq 'prv') { |
Line 1527 END
|
Line 1560 END
|
$defaultoption='default'; |
$defaultoption='default'; |
} |
} |
$intr_scrout.=&selectbox('Copyright/Distribution','copyright', |
$intr_scrout.=&selectbox('Copyright/Distribution','copyright', |
$defaultoption, |
$defaultoption,$readonly, |
\&Apache::loncommon::copyrightdescription, |
\&Apache::loncommon::copyrightdescription, |
(grep !/^(public|priv)$/,(&Apache::loncommon::copyrightids))); |
(grep !/^(public|priv)$/,(&Apache::loncommon::copyrightids))); |
} else { |
} else { |
$intr_scrout.=&selectbox('Copyright/Distribution','copyright', |
$intr_scrout.=&selectbox('Copyright/Distribution','copyright', |
$defaultoption, |
$defaultoption,$readonly, |
\&Apache::loncommon::copyrightdescription, |
\&Apache::loncommon::copyrightdescription, |
(grep !/^priv$/,(&Apache::loncommon::copyrightids))); |
(grep !/^priv$/,(&Apache::loncommon::copyrightids))); |
} |
} |
Line 1541 END
|
Line 1574 END
|
my $replace=&mt('Copyright/Distribution:'); |
my $replace=&mt('Copyright/Distribution:'); |
$intr_scrout =~ s/$replace/$replace.' '.$copyright_help/ge; |
$intr_scrout =~ s/$replace/$replace.' '.$copyright_help/ge; |
|
|
$intr_scrout.=&text_with_browse_field('Custom Distribution File','customdistributionfile',$metadatafields{'customdistributionfile'},'rights'); |
$intr_scrout.=&text_with_browse_field('Custom Distribution File','customdistributionfile',$metadatafields{'customdistributionfile'},'rights','',$readonly); |
$intr_scrout.=&selectbox('Source Distribution','sourceavail', |
$intr_scrout.=&selectbox('Source Distribution','sourceavail', |
$defaultsourceoption, |
$defaultsourceoption,'', |
\&Apache::loncommon::source_copyrightdescription, |
\&Apache::loncommon::source_copyrightdescription, |
(&Apache::loncommon::source_copyrightids)); |
(&Apache::loncommon::source_copyrightids)); |
# $intr_scrout.=&text_with_browse_field('Source Custom Distribution File','sourcerights',$metadatafields{'sourcerights'},'rights'); |
# $intr_scrout.=&text_with_browse_field('Source Custom Distribution File','sourcerights',$metadatafields{'sourcerights'},'rights'); |
Line 1792 sub phasetwo {
|
Line 1825 sub phasetwo {
|
$env{'user.domain'}; |
$env{'user.domain'}; |
$metadatafields{'authorspace'}=$cuname.':'.$cudom; |
$metadatafields{'authorspace'}=$cuname.':'.$cudom; |
$metadatafields{'domain'}=$cudom; |
$metadatafields{'domain'}=$cudom; |
|
|
|
my $crsauthor; |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($distarget =~ m{^/res/$cdom/$cnum}) { |
|
$crsauthor = 1; |
|
my $default_rights = "/res/$cdom/$cnum/default.rights"; |
|
unless ($distarget eq $default_rights) { |
|
$metadatafields{'copyright'} = 'custom'; |
|
$metadatafields{'customdistributionfile'} = $default_rights; |
|
} |
|
} |
|
} |
|
|
my $allkeywords=$env{'form.addkey'}; |
my $allkeywords=$env{'form.addkey'}; |
if (exists($env{'form.keywords'})) { |
if (exists($env{'form.keywords'})) { |
if (ref($env{'form.keywords'})) { |
if (ref($env{'form.keywords'})) { |
Line 1874 sub phasetwo {
|
Line 1921 sub phasetwo {
|
$metadatafields{'url'} = $distarget; |
$metadatafields{'url'} = $distarget; |
$metadatafields{'version'} = 'current'; |
$metadatafields{'version'} = 'current'; |
|
|
my $crsauthor; |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($distarget =~ m{^/res/$cdom/$cnum}) { |
|
$crsauthor = 1; |
|
} |
|
} |
|
unless ($crsauthor) { |
unless ($crsauthor) { |
my ($error,$success) = &store_metadata(%metadatafields); |
my ($error,$success) = &store_metadata(%metadatafields); |
if ($success) { |
if ($success) { |
Line 2090 sub phasetwo {
|
Line 2129 sub phasetwo {
|
|
|
# ------------------------------------------------------------- Trigger updates |
# ------------------------------------------------------------- Trigger updates |
push(@{$modified_urls},[$target,$source]); |
push(@{$modified_urls},[$target,$source]); |
unless ($registered_cleanup) { |
¬ify_in_cleanup($r); |
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ify,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
|
|
|
# ---------------------------------------------------------- Clear local caches |
# ---------------------------------------------------------- Clear local caches |
my $thisdistarget=$target; |
my $thisdistarget=$target; |
Line 2150 sub phasetwo {
|
Line 2185 sub phasetwo {
|
} |
} |
} |
} |
|
|
|
sub notify_in_cleanup { |
|
my ($r) = @_; |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ify,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
|
} |
|
|
# =============================================================== Notifications |
# =============================================================== Notifications |
sub notify { |
sub notify { |
# --------------------------------------------------- Send update notifications |
# --------------------------------------------------- Send update notifications |
Line 2249 sub batchpublish {
|
Line 2293 sub batchpublish {
|
######################################### |
######################################### |
|
|
sub publishdirectory { |
sub publishdirectory { |
my ($r,$fn,$thisdisfn,$nokeyref)=@_; |
my ($r,$fn,$thisdisfn,$nokeyref,$crsauthor)=@_; |
$fn=~s/\/+/\//g; |
$fn=~s/\/+/\//g; |
$thisdisfn=~s/\/+/\//g; |
$thisdisfn=~s/\/+/\//g; |
my $thisdisresdir=$thisdisfn; |
my $thisdisresdir=$thisdisfn; |
Line 2290 sub publishdirectory {
|
Line 2334 sub publishdirectory {
|
&checkbox('excludemodmeta','exclude files with modified metadata'). |
&checkbox('excludemodmeta','exclude files with modified metadata'). |
'</fieldset>'. |
'</fieldset>'. |
'<fieldset><legend>'.&mt('Actions').'</legend>'. |
'<fieldset><legend>'.&mt('Actions').'</legend>'. |
&checkbox('obsolete','make file(s) obsolete').'<br />'. |
&checkbox('obsolete','make file(s) obsolete').'<br />'); |
&common_access('dist',&mt('apply common copyright/distribution'), |
unless ($crsauthor) { |
['default','domain','custom']).'<br />'. |
$r->print(&common_access('dist',&mt('apply common copyright/distribution'), |
&common_access('source',&mt('apply common source availability'), |
['default','domain','public','custom']).'<br />'); |
|
} |
|
$r->print(&common_access('source',&mt('apply common source availability'), |
['closed','open']). |
['closed','open']). |
'</fieldset>' |
'</fieldset>' |
); |
); |
Line 2309 sub publishdirectory {
|
Line 2355 sub publishdirectory {
|
my %commonaccess; |
my %commonaccess; |
map { $commonaccess{$_} = 1; } &Apache::loncommon::get_env_multiple('form.commonaccess'); |
map { $commonaccess{$_} = 1; } &Apache::loncommon::get_env_multiple('form.commonaccess'); |
unless ($lock) { $lock=&Apache::lonnet::set_lock(&mt('Publishing [_1]',$fn)); } |
unless ($lock) { $lock=&Apache::lonnet::set_lock(&mt('Publishing [_1]',$fn)); } |
|
if ($lock) { |
|
¬ify_in_cleanup($r); |
|
} |
# actually publish things |
# actually publish things |
opendir(DIR,$fn); |
opendir(DIR,$fn); |
my @files=sort(readdir(DIR)); |
my @files=sort(readdir(DIR)); |
Line 2317 sub publishdirectory {
|
Line 2366 sub publishdirectory {
|
$cuid,$cgid,$crdev,$csize, |
$cuid,$cgid,$crdev,$csize, |
$catime,$cmtime,$cctime, |
$catime,$cmtime,$cctime, |
$cblksize,$cblocks)=stat($fn.'/'.$filename); |
$cblksize,$cblocks)=stat($fn.'/'.$filename); |
|
|
my $extension=''; |
my $extension=''; |
if ($filename=~/\.(\w+)$/) { $extension=$1; } |
if ($filename=~/\.(\w+)$/) { $extension=$1; } |
if ($cmode&$dirptr) { |
if ($cmode&$dirptr) { |
if (($filename!~/^\./) && ($env{'form.pubrec'})) { |
if (($filename!~/^\./) && ($env{'form.pubrec'})) { |
&publishdirectory($r,$fn.'/'.$filename,$thisdisfn.'/'.$filename,$nokeyref); |
&publishdirectory($r,$fn.'/'.$filename,$thisdisfn.'/'.$filename,$nokeyref,$crsauthor); |
} |
} |
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
Line 2565 sub handler {
|
Line 2614 sub handler {
|
|
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
# Breadcrumbs |
# Breadcrumbs |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
my $crumbtext = 'Authoring Space'; |
|
my $crumbhref = &Apache::loncommon::authorspace($fn); |
|
my $crsauthor; |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($crumbhref eq "/priv/$cdom/$cnum/") { |
|
$crumbtext = 'Course Authoring Space'; |
|
$crsauthor = 1; |
|
} |
|
} |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'Authoring Space', |
'text' => $crumbtext, |
'href' => &Apache::loncommon::authorspace($fn), |
'href' => $crumbhref, |
}); |
}); |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'Resource Publication', |
'text' => 'Resource Publication', |
Line 2640 END
|
Line 2700 END
|
|
|
if ($fn=~/\/$/) { |
if ($fn=~/\/$/) { |
# -------------------------------------------------------- This is a directory |
# -------------------------------------------------------- This is a directory |
&publishdirectory($r,$docroot.$fn,$thisdisfn,$nokeyref); |
&publishdirectory($r,$docroot.$fn,$thisdisfn,$nokeyref,$crsauthor); |
$r->print( |
$r->print( |
'<br /><br />'. |
'<br /><br />'. |
&Apache::lonhtmlcommon::actionbox([ |
&Apache::lonhtmlcommon::actionbox([ |