Add the ability for posts to have metadata. The option is turned off by default,
but can be enabled in the CS. If the option is turned on, and metadata is enabled on the site, then sets of template variables will be made available to the Post Form template, the Thread view template, and the CS view template.
This commit is contained in:
parent
3b336e56a4
commit
2af436a0ad
8 changed files with 181 additions and 27 deletions
|
|
@ -19,6 +19,7 @@ use WebGUI::Cache;
|
|||
use WebGUI::Group;
|
||||
use WebGUI::HTML;
|
||||
use WebGUI::HTMLForm;
|
||||
use WebGUI::Form::DynamicField;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Inbox;
|
||||
use WebGUI::Mail::Send;
|
||||
|
|
@ -478,6 +479,28 @@ sub getSynopsisAndContent {
|
|||
return ($synopsis,$body);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getTemplateMetadataVars {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
if ($self->session->setting->get("metaDataEnabled")
|
||||
&& $self->getThread->getParent->get('enablePostMetaData')) {
|
||||
my $meta = $self->getMetaDataFields();
|
||||
my @meta_loop = ();
|
||||
foreach my $field (keys %{ $meta }) {
|
||||
push @meta_loop, {
|
||||
value => $meta->{$field}{value},
|
||||
name => $meta->{$field}{fieldName},
|
||||
};
|
||||
my $fieldName = $meta->{$field}{fieldName};
|
||||
$fieldName =~ tr/ /_/;
|
||||
$fieldName = lc $fieldName;
|
||||
$var->{'meta_'.$fieldName.'_value'} = $meta->{$field}{value}; ##By name interface
|
||||
}
|
||||
$var->{meta_loop} = \@meta_loop;
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getTemplateVars {
|
||||
my $self = shift;
|
||||
|
|
@ -527,6 +550,7 @@ sub getTemplateVars {
|
|||
});
|
||||
}
|
||||
}
|
||||
$self->getTemplateMetadataVars(\%var);
|
||||
return \%var;
|
||||
}
|
||||
|
||||
|
|
@ -1062,7 +1086,7 @@ sub www_edit {
|
|||
if ($self->session->form->process("func") eq "add") { # new post
|
||||
$var{'form.header'} = WebGUI::Form::formHeader($self->session,{action=>$self->getParent->getUrl})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
name=>"func",
|
||||
name=>"func",
|
||||
value=>"add"
|
||||
})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
|
|
@ -1073,7 +1097,7 @@ sub www_edit {
|
|||
name=>"class",
|
||||
value=>$self->session->form->process("class","className")
|
||||
});
|
||||
$var{'isNewPost'} = 1;
|
||||
$var{'isNewPost'} = 1;
|
||||
$content = $self->session->form->process("content");
|
||||
$title = $self->session->form->process("title");
|
||||
$synopsis = $self->session->form->process("synopsis");
|
||||
|
|
@ -1096,46 +1120,48 @@ sub www_edit {
|
|||
name=>"subscribe",
|
||||
value=>$self->session->form->process("subscribe")
|
||||
});
|
||||
} elsif ($self->session->form->process("class","className") eq "WebGUI::Asset::Post::Thread") { # new thread
|
||||
}
|
||||
elsif ($self->session->form->process("class","className") eq "WebGUI::Asset::Post::Thread") { # new thread
|
||||
return $self->session->privilege->insufficient() unless ($self->getThread->getParent->canPost);
|
||||
$var{isThread} = 1;
|
||||
$var{isNewThread} = 1;
|
||||
if ($self->getThread->getParent->canEdit) {
|
||||
$var{'sticky.form'} = WebGUI::Form::yesNo($self->session, {
|
||||
name=>'stick',
|
||||
value=>$self->session->form->process("stick")
|
||||
});
|
||||
$var{'lock.form'} = WebGUI::Form::yesNo($self->session, {
|
||||
name=>'lock',
|
||||
value=>$self->session->form->process('lock')
|
||||
});
|
||||
if ($self->getThread->getParent->canEdit) {
|
||||
$var{'sticky.form'} = WebGUI::Form::yesNo($self->session, {
|
||||
name=>'stick',
|
||||
value=>$self->session->form->process("stick")
|
||||
});
|
||||
$var{'lock.form'} = WebGUI::Form::yesNo($self->session, {
|
||||
name=>'lock',
|
||||
value=>$self->session->form->process('lock')
|
||||
});
|
||||
}
|
||||
$var{'subscribe.form'} = WebGUI::Form::yesNo($self->session, {
|
||||
name=>"subscribe",
|
||||
value=>$self->session->form->process("subscribe") || 1
|
||||
});
|
||||
}
|
||||
$content .= "\n\n".$self->session->user->profileField("signature") if ($self->session->user->profileField("signature") && !$self->session->form->process("content"));
|
||||
} else { # edit
|
||||
$content .= "\n\n".$self->session->user->profileField("signature") if ($self->session->user->profileField("signature") && !$self->session->form->process("content"));
|
||||
}
|
||||
else { # edit
|
||||
return $self->session->privilege->insufficient() unless ($self->canEdit);
|
||||
$var{isThread} = !$self->isReply;
|
||||
$var{'form.header'} = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
name=>"func",
|
||||
value=>"edit"
|
||||
})
|
||||
name=>"func",
|
||||
value=>"edit"
|
||||
})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
name=>"revision",
|
||||
value=>$self->session->form->param("revision")
|
||||
})
|
||||
})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
name=>"ownerUserId",
|
||||
value=>$self->getValue("ownerUserId")
|
||||
})
|
||||
})
|
||||
.WebGUI::Form::hidden($self->session, {
|
||||
name=>"username",
|
||||
value=>$self->getValue("username")
|
||||
});
|
||||
});
|
||||
$var{isEdit} = 1;
|
||||
$content = $self->session->form->process('content') || $self->getValue("content");
|
||||
$title = $self->session->form->process('title') || $self->getValue("title");
|
||||
|
|
@ -1193,11 +1219,11 @@ sub www_edit {
|
|||
value => $userDefinedValue,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$title = WebGUI::HTML::filter($title,"all");
|
||||
$content = WebGUI::HTML::filter($content,"macros");
|
||||
$synopsis = WebGUI::HTML::filter($synopsis,"all");
|
||||
|
||||
|
||||
$var{'title.form'} = WebGUI::Form::text($self->session, {
|
||||
name=>"title",
|
||||
value=>$title
|
||||
|
|
@ -1234,10 +1260,43 @@ sub www_edit {
|
|||
maxAttachments=>$numberOfAttachments,
|
||||
deleteFileUrl=>$self->getUrl("func=deleteFile;filename=")
|
||||
}) if ($numberOfAttachments);
|
||||
$var{'contentType.form'} = WebGUI::Form::contentType($self->session, {
|
||||
name=>'contentType',
|
||||
value=>$self->getValue("contentType") || "mixed"
|
||||
});
|
||||
$var{'contentType.form'} = WebGUI::Form::contentType($self->session, {
|
||||
name=>'contentType',
|
||||
value=>$self->getValue("contentType") || "mixed",
|
||||
});
|
||||
if ($self->session->setting->get("metaDataEnabled")
|
||||
&& $self->getThread->getParent->get('enablePostMetaData')) {
|
||||
my $meta = $self->getMetaDataFields();
|
||||
my $formGen = $self->session->form;
|
||||
my @meta_loop = ();
|
||||
foreach my $field (keys %{ $meta }) {
|
||||
my $fieldType = $meta->{$field}{fieldType} || "Text";
|
||||
my $options;
|
||||
# Add a "Select..." option on top of a select list to prevent from
|
||||
# saving the value on top of the list when no choice is made.
|
||||
if($fieldType eq "selectList") {
|
||||
$options = {"", $i18n->get("Select", "Asset")};
|
||||
}
|
||||
my $form = WebGUI::Form::DynamicField->new($self->session,
|
||||
name=>"metadata_".$meta->{$field}{fieldId},
|
||||
uiLevel=>5,
|
||||
value=>$meta->{$field}{value},
|
||||
extras=>qq/title="$meta->{$field}{description}"/,
|
||||
possibleValues=>$meta->{$field}{possibleValues},
|
||||
options=>$options,
|
||||
fieldType=>$fieldType,
|
||||
)->toHtml;
|
||||
push @meta_loop, {
|
||||
field => $form,
|
||||
name => $meta->{$field}{fieldName},
|
||||
};
|
||||
my $fieldName = $meta->{$field}{fieldName};
|
||||
$fieldName =~ tr/ /_/;
|
||||
$fieldName = lc $fieldName;
|
||||
$var{'meta_'.$fieldName.'_form'} = $form; ##By name interface
|
||||
}
|
||||
$var{meta_loop} = \@meta_loop;
|
||||
}
|
||||
$self->getThread->getParent->appendTemplateLabels(\%var);
|
||||
return $self->getThread->getParent->processStyle($self->processTemplate(\%var,$self->getThread->getParent->get("postFormTemplateId")));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ sub appendPostListTemplateVars {
|
|||
"avatar.url"=>$post->getAvatarUrl,
|
||||
%lastReply
|
||||
);
|
||||
$post->getTemplateMetadataVars(\%postVars);
|
||||
if ($row->{className} eq 'WebGUI::Asset::Post::Thread') {
|
||||
$postVars{'rating'} = $post->get('threadRating');
|
||||
}
|
||||
|
|
@ -620,6 +621,13 @@ sub definition {
|
|||
label=>$i18n->get('enable avatars'),
|
||||
hoverHelp=>$i18n->get('enable avatars description'),
|
||||
},
|
||||
enablePostMetaData =>{
|
||||
fieldType=>"yesNo",
|
||||
defaultValue=>0,
|
||||
tab=>'meta',
|
||||
label=>$i18n->get('enable metadata'),
|
||||
hoverHelp=>$i18n->get('enable metadata description'),
|
||||
},
|
||||
postGroupId =>{
|
||||
fieldType=>"group",
|
||||
defaultValue=>'2',
|
||||
|
|
|
|||
|
|
@ -156,6 +156,11 @@ our $HELP = {
|
|||
description => 'enable avatars description',
|
||||
namespace => 'Asset_Collaboration',
|
||||
},
|
||||
{
|
||||
title => 'enable metadata',
|
||||
description => 'enable metadata description',
|
||||
namespace => 'Asset_Collaboration',
|
||||
},
|
||||
{
|
||||
title => 'get mail',
|
||||
description => 'get mail help',
|
||||
|
|
|
|||
|
|
@ -129,6 +129,20 @@ our $HELP = {
|
|||
{
|
||||
'name' => 'karmaIsEnabled'
|
||||
},
|
||||
{
|
||||
'name' => 'meta_loop',
|
||||
'variables' => [
|
||||
{
|
||||
'name' => 'name'
|
||||
},
|
||||
{
|
||||
'name' => 'field'
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
'name' => 'meta_X_form'
|
||||
},
|
||||
{
|
||||
'name' => 'form.preview'
|
||||
},
|
||||
|
|
@ -250,6 +264,20 @@ our $HELP = {
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'name' => 'meta_loop',
|
||||
'variables' => [
|
||||
{
|
||||
'name' => 'name'
|
||||
},
|
||||
{
|
||||
'name' => 'value'
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
'name' => 'meta_X_value'
|
||||
},
|
||||
],
|
||||
fields => [
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1510,6 +1510,16 @@ the Collaboration Asset, the user will be notified.|,
|
|||
lastUpdated => 1165449336,
|
||||
},
|
||||
|
||||
'enable metadata' => {
|
||||
message => q|Enable MetaData in Posts?|,
|
||||
lastUpdated => 1180759718,
|
||||
},
|
||||
|
||||
'enable metadata description' => {
|
||||
message => q|<p>Select "Yes" to enable Posts to have MetaData and to be passively profiled. This will impact the performance of the Collaboration System. MetaData must also be enabled sitewide in the site settings.</p>|,
|
||||
lastUpdated => 1180759724,
|
||||
},
|
||||
|
||||
'collaboration rss template title' => {
|
||||
message => q|Collaboration RSS Template|,
|
||||
lastUpdated => 1114467745,
|
||||
|
|
|
|||
|
|
@ -595,12 +595,42 @@ user subscribed to.|,
|
|||
context => q|label for Asset Manager, getName|,
|
||||
lastUpdated => 1128829703,
|
||||
},
|
||||
|
||||
|
||||
'new file description' => {
|
||||
message => q|Enter the path to a file, or use the "Browse" button to find a file on your local hard drive that you would like to be uploaded.|,
|
||||
lastUpdated => 1119068745
|
||||
},
|
||||
|
||||
'meta_loop' => {
|
||||
message => q|A loop containing metadata lables and fields for this Post. If metadata is not enabled for the site, or if metadata is not enabled for this CS, or if there's no metadata defined for the site, the loop will be empty.|,
|
||||
lastUpdated => 1180928713
|
||||
},
|
||||
|
||||
'field' => {
|
||||
message => q|The form for this metadata field.|,
|
||||
lastUpdated => 1180928713
|
||||
},
|
||||
|
||||
'name' => {
|
||||
message => q|The label for this metadata field. Metadata labels are not internationalized.|,
|
||||
lastUpdated => 1180928713
|
||||
},
|
||||
|
||||
'value' => {
|
||||
message => q|The value of this metadata field for this post.|,
|
||||
lastUpdated => 1180928713
|
||||
},
|
||||
|
||||
'meta_X_form' => {
|
||||
message => q|The form for a particular metadata field, picked by name. X is the name of the metadata field, where any spaces in the name have been changed into underscores.|,
|
||||
lastUpdated => 1180929142
|
||||
},
|
||||
|
||||
'meta_X_value' => {
|
||||
message => q|The value for a particular metadata field, picked by name. X is the name of the metadata field, where any spaces in the name have been changed into underscores.|,
|
||||
lastUpdated => 1180931029
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue