version 1.296, 2016/06/19 01:08:01
|
version 1.302, 2023/07/14 20:16:04
|
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 367 sub hiddenfield {
|
Line 376 sub hiddenfield {
|
|
|
sub checkbox { |
sub checkbox { |
my ($name,$text)=@_; |
my ($name,$text)=@_; |
return "\n<br /><label><input type='checkbox' name='$name' /> ". |
return "\n<label><input type='checkbox' name='$name' /> ". |
&mt($text)."</label>"; |
&mt($text)."</label>"; |
} |
} |
|
|
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 424 sub common_access {
|
Line 436 sub common_access {
|
'sel' => 'Select', |
'sel' => 'Select', |
); |
); |
my $output = <<"END"; |
my $output = <<"END"; |
<br /> |
|
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
<label> |
<label> |
<input type="checkbox" name="commonaccess" value="$name" id="$chkid" |
<input type="checkbox" name="commonaccess" value="$name" id="$chkid" |
Line 1200 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 1486 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 1503 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 1517 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 1528 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 1542 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 1793 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 1875 sub phasetwo {
|
Line 1921 sub phasetwo {
|
$metadatafields{'url'} = $distarget; |
$metadatafields{'url'} = $distarget; |
$metadatafields{'version'} = 'current'; |
$metadatafields{'version'} = 'current'; |
|
|
my ($error,$success) = &store_metadata(%metadatafields); |
unless ($crsauthor) { |
if ($success) { |
my ($error,$success) = &store_metadata(%metadatafields); |
$output .= '<p>'.&mt('Synchronized SQL metadata database').'</p>'; |
if ($success) { |
print $logfile "\nSynchronized SQL metadata database"; |
$output .= '<p>'.&mt('Synchronized SQL metadata database').'</p>'; |
} else { |
print $logfile "\nSynchronized SQL metadata database"; |
$output .= $error; |
} else { |
print $logfile "\n".$error; |
$output .= $error; |
} |
print $logfile "\n".$error; |
unless ($usebuffer) { |
} |
$r->print($output); |
unless ($usebuffer) { |
$output = ''; |
$r->print($output); |
|
$output = ''; |
|
} |
} |
} |
# --------------------------------------------- Delete author resource messages |
# --------------------------------------------- Delete author resource messages |
my $delresult=&Apache::lonmsg::del_url_author_res_msg($target); |
my $delresult=&Apache::lonmsg::del_url_author_res_msg($target); |
Line 2254 sub publishdirectory {
|
Line 2302 sub publishdirectory {
|
.&Apache::lonhtmlcommon::row_title(&mt('Target')) |
.&Apache::lonhtmlcommon::row_title(&mt('Target')) |
.'<span class="LC_filename">'.$thisdisresdir.'</span>' |
.'<span class="LC_filename">'.$thisdisresdir.'</span>' |
); |
); |
|
my %reasons = &Apache::lonlocal::texthash( |
|
mod => 'Authoring Space file postdates published file', |
|
modmeta => 'Authoring Space metadata file postdates published file', |
|
unpub => 'Resource is unpublished', |
|
); |
|
|
my $dirptr=16384; # Mask indicating a directory in stat.cmode. |
my $dirptr=16384; # Mask indicating a directory in stat.cmode. |
unless ($env{'form.phase'} eq 'two') { |
unless ($env{'form.phase'} eq 'two') { |
# ask user what they want |
# ask user what they want |
$r->print(&Apache::lonhtmlcommon::row_closure() |
$r->print(&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_title(&mt('Options')) |
.&Apache::lonhtmlcommon::row_title(&mt('Options') |
); |
.&Apache::loncommon::help_open_topic('Publishing_Directory_Options'))); |
$r->print(&hiddenfield('phase','two'). |
$r->print(&hiddenfield('phase','two'). |
&hiddenfield('filename',$env{'form.filename'}). |
&hiddenfield('filename',$env{'form.filename'}). |
&checkbox('pubrec','include subdirectories'). |
'<fieldset><legend>'.&mt('Recurse').'</legend>'. |
&checkbox('forcerepub','force republication of previously published files'). |
&checkbox('pubrec','include subdirectories'). |
&checkbox('obsolete','make file(s) obsolete'). |
'</fieldset>'. |
&checkbox('forceoverride','force directory level metadata over existing'). |
'<fieldset><legend>'.&mt('Force').'</legend>'. |
|
&checkbox('forcerepub','force republication of previously published files').'<br />'. |
|
&checkbox('forceoverride','force directory level metadata over existing'). |
|
'</fieldset>'. |
|
'<fieldset><legend>'.&mt('Exclude').'</legend>'. |
|
&checkbox('excludeunpub','exclude currently unpublished files').'<br />'. |
|
&checkbox('excludemod','exclude modified files').'<br />'. |
|
&checkbox('excludemodmeta','exclude files with modified metadata'). |
|
'</fieldset>'. |
|
'<fieldset><legend>'.&mt('Actions').'</legend>'. |
|
&checkbox('obsolete','make file(s) obsolete').'<br />'. |
&common_access('dist',&mt('apply common copyright/distribution'), |
&common_access('dist',&mt('apply common copyright/distribution'), |
['default','domain','custom']). |
['default','domain','public','custom']).'<br />'. |
&common_access('source',&mt('apply common source availability'), |
&common_access('source',&mt('apply common source availability'), |
['closed','open']) |
['closed','open']). |
|
'</fieldset>' |
); |
); |
$r->print(&Apache::lonhtmlcommon::row_closure(1) |
$r->print(&Apache::lonhtmlcommon::row_closure(1) |
.&Apache::lonhtmlcommon::end_pick_box() |
.&Apache::lonhtmlcommon::end_pick_box() |
Line 2281 sub publishdirectory {
|
Line 2345 sub publishdirectory {
|
$r->print(&Apache::lonhtmlcommon::row_closure(1) |
$r->print(&Apache::lonhtmlcommon::row_closure(1) |
.&Apache::lonhtmlcommon::end_pick_box() |
.&Apache::lonhtmlcommon::end_pick_box() |
); |
); |
|
my %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)); } |
# actually publish things |
# actually publish things |
opendir(DIR,$fn); |
opendir(DIR,$fn); |
Line 2299 sub publishdirectory {
|
Line 2365 sub publishdirectory {
|
} |
} |
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
} elsif ((&Apache::loncommon::fileembstyle($extension) ne 'hdn') && |
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
($filename!~/^[\#\.]/) && ($filename!~/\~$/)) { |
# find out publication status and/or exiting metadata |
# find out publication status and/or existing metadata |
my $publishthis=0; |
my $publishthis=0; |
|
my $skipthis; |
if (-e $resdir.'/'.$filename) { |
if (-e $resdir.'/'.$filename) { |
my ($rdev,$rino,$rmode,$rnlink, |
my ($rdev,$rino,$rmode,$rnlink, |
$ruid,$rgid,$rrdev,$rsize, |
$ruid,$rgid,$rrdev,$rsize, |
Line 2308 sub publishdirectory {
|
Line 2375 sub publishdirectory {
|
$rblksize,$rblocks)=stat($resdir.'/'.$filename); |
$rblksize,$rblocks)=stat($resdir.'/'.$filename); |
if (($rmtime<$cmtime) || ($env{'form.forcerepub'})) { |
if (($rmtime<$cmtime) || ($env{'form.forcerepub'})) { |
# previously published, modified now |
# previously published, modified now |
$publishthis=1; |
if ($env{'form.excludemod'}) { |
} |
$skipthis='mod'; |
my $meta_cmtime = (stat($fn.'/'.$filename.'.meta'))[9]; |
} else { |
my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9]; |
$publishthis=1; |
if ( $meta_rmtime<$meta_cmtime ) { |
} |
$publishthis=1; |
|
} |
} |
|
unless ($skipthis) { |
|
my $meta_cmtime = (stat($fn.'/'.$filename.'.meta'))[9]; |
|
my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9]; |
|
if ( $meta_rmtime<$meta_cmtime ) { |
|
if ($env{'form.excludemodmeta'}) { |
|
$skipthis='modmeta'; |
|
$publishthis=0; |
|
} else { |
|
$publishthis=1; |
|
} |
|
} else { |
|
unless (&Apache::loncommon::fileembstyle($extension) eq 'prv') { |
|
if ($commonaccess{'dist'}) { |
|
my ($currdist,$currdistfile,$currsourceavail); |
|
my $currdist = &Apache::lonnet::metadata($thisdisresdir.'/'.$filename,'copyright'); |
|
if ($currdist eq 'custom') { |
|
$currdistfile = &Apache::lonnet::metadata($thisdisresdir.'/'.$filename,'customdistributionfile'); |
|
} |
|
if ($env{'form.commondistselect'} eq 'custom') { |
|
if ($env{'form.commoncustomrights'} =~ m{^/res/.+\.rights$}) { |
|
if ($currdist eq 'custom') { |
|
unless ($env{'form.commoncustomrights'} eq $currdistfile) { |
|
$publishthis=1; |
|
} |
|
} else { |
|
$publishthis=1; |
|
} |
|
} |
|
} elsif ($env{'form.commondistselect'} =~ /^default|domain|public$/) { |
|
unless ($currdist eq $env{'form.commondistselect'}) { |
|
$publishthis=1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
} else { |
} else { |
# never published |
# never published |
$publishthis=1; |
if ($env{'form.excludeunpub'}) { |
|
$skipthis='unpub'; |
|
} else { |
|
$publishthis=1; |
|
} |
} |
} |
|
|
if ($publishthis) { |
if ($publishthis) { |
&batchpublish($r,$fn.'/'.$filename,$resdir.'/'.$filename,$nokeyref); |
&batchpublish($r,$fn.'/'.$filename,$resdir.'/'.$filename,$nokeyref); |
} else { |
} else { |
$r->print('<br />'.&mt('Skipping').' '.$filename.'<br />'); |
my $reason; |
|
if ($skipthis) { |
|
$reason = $reasons{$skipthis}; |
|
} else { |
|
$reason = &mt('No changes needed to published resource or metadata'); |
|
} |
|
$r->print('<br />'.&mt('Skipping').' '.$filename); |
|
if ($reason) { |
|
$r->print(' ('.$reason.')'); |
|
} |
|
$r->print('<br />'); |
} |
} |
$r->rflush(); |
$r->rflush(); |
} |
} |
Line 2487 sub handler {
|
Line 2604 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); |
|
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'; |
|
} |
|
} |
&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', |