# Update TagCloud weight
foreach my $fields_dbic (
$c->model('StephenSykesDB::ArticleTags')->search(
article_id => $form->{article_id},
{
prefetch => 'tag_cloud',
},
)
) {
if ($fields_dbic->tag_cloud->weight > 0) {
# Subtract 1 from weight and update tag cloud
my $new_weight = ($fields_dbic->tag_cloud->weight - 1);
$c->model('StephenSykesDB::TagCloud')->update_or_create({
tag_id => $fields_dbic->tag_cloud->tag_id,
descr => $fields_dbic->tag_cloud->descr,
weight => $new_weight,
});
}
}
# Delete all ArticleTags and then add new from form
$c->model('StephenSykesDB::ArticleTags')->search({ article_id => $form->{article_id} })->delete;
# Split tags on white space
my @tags = split(/ /, $form->{Tags});
foreach my $tag_rec (@tags) {
$tag_rec =~ tr/[A-Z]/[a-z]/;
my $tag_cloud_dbic = $c->model('StephenSykesDB::TagCloud')->find({ descr => $tag_rec });
if ($tag_cloud_dbic) { # update existing tag
my $new_weight = ($tag_cloud_dbic->weight + 1);
$c->model('StephenSykesDB::TagCloud')->update_or_create({
tag_id => $tag_cloud_dbic->tag_id,
descr => $tag_cloud_dbic->descr,
weight => $new_weight,
});
# Add tags to site_tags table
$c->model('StephenSykesDB::ArticleTags')->create({
article_id => $form->{article_id},
tag_id => $tag_cloud_dbic->tag_id,
});
} else { # create new tag
$c->model('StephenSykesDB::TagCloud')->create({
tag_id => undef,
descr => $tag_rec,
weight => '1',
});
# Get new tag_id
my $tag_dbic = $c->model('StephenSykesDB::TagCloud')->find({ descr => $tag_rec });
# Add tags to site_tags table
$c->model('StephenSykesDB::ArticleTags')->create({
article_id => $form->{article_id},
tag_id => $tag_dbic->tag_id,
});
}
}