fix: Last Reply and Replies columns not updating

This commit is contained in:
JT Smith 2007-10-05 20:20:42 +00:00
parent 9167097d11
commit ee85bc1e02
6 changed files with 100 additions and 87 deletions

View file

@ -7,6 +7,7 @@
- fix: wiki recent - fix: wiki recent
- fix: Dashboard content positioning field problem - fix: Dashboard content positioning field problem
- fix: graphing doesn't work with GraphicsMagick - fix: graphing doesn't work with GraphicsMagick
- fix: Last Reply and Replies columns not updating
- fix: Calendar generated iCal for last 30 days instead of next 30 days - fix: Calendar generated iCal for last 30 days instead of next 30 days
- fix: hover help doesn't appear for matrix fields - fix: hover help doesn't appear for matrix fields
- Collaboration systems should always tell browser there is new content - Collaboration systems should always tell browser there is new content

View file

@ -22,6 +22,7 @@ my $session = start(); # this line required
removeOrphanedGroupings($session); # upgrade functions go here removeOrphanedGroupings($session); # upgrade functions go here
fixDashboardContentPositions($session); fixDashboardContentPositions($session);
fixPosts($session);
finish($session); # this line required finish($session); # this line required
@ -36,6 +37,17 @@ sub removeOrphanedGroupings {
} }
#-------------------------------------------------
sub fixPosts {
my $session = shift;
my $db = $session->db;
print "\tRemoving unneeded fields from Posts.\n" unless ($quiet);
$db->write("alter table Post drop column dateSubmitted");
$db->write("alter table Post drop column dateUpdated");
$db->write("update Collaboration set sortBy='assetData.revisionDate' where sortBy='dateUpdated'");
$db->write("update Collaboration set sortBy='creationDate' where sortBy='dateSubmitted'");
}
#------------------------------------------------- #-------------------------------------------------
sub fixDashboardContentPositions { sub fixDashboardContentPositions {
my $session = shift; my $session = shift;

View file

@ -72,16 +72,12 @@ sub addRevision {
my $now = time(); my $now = time();
if ($threadId eq "") { # new post if ($threadId eq "") { # new post
if ($newSelf->getParent->isa("WebGUI::Asset::Wobject::Collaboration")) { if ($newSelf->getParent->isa("WebGUI::Asset::Wobject::Collaboration")) {
$newSelf->update({threadId=>$newSelf->getId, dateSubmitted=>$now}); $newSelf->update({threadId=>$newSelf->getId});
} else { } else {
$newSelf->update({threadId=>$newSelf->getParent->get("threadId"), dateSubmitted=>$now}); $newSelf->update({threadId=>$newSelf->getParent->get("threadId")});
} }
delete $newSelf->{_thread}; delete $newSelf->{_thread};
} }
$newSelf->update({
dateUpdated=>$now,
});
$newSelf->getThread->unmarkRead; $newSelf->getThread->unmarkRead;
return $newSelf; return $newSelf;
@ -99,7 +95,7 @@ sub canEdit {
my $self = shift; my $self = shift;
return (($self->session->form->process("func") eq "add" || ($self->session->form->process("assetId") eq "new" && $self->session->form->process("func") eq "editSave" && $self->session->form->process("class","className") eq "WebGUI::Asset::Post")) && $self->getThread->getParent->canPost) || # account for new posts return (($self->session->form->process("func") eq "add" || ($self->session->form->process("assetId") eq "new" && $self->session->form->process("func") eq "editSave" && $self->session->form->process("class","className") eq "WebGUI::Asset::Post")) && $self->getThread->getParent->canPost) || # account for new posts
($self->isPoster && $self->getThread->getParent->get("editTimeout") > ($self->session->datetime->time() - $self->get("dateUpdated"))) || ($self->isPoster && $self->getThread->getParent->get("editTimeout") > ($self->session->datetime->time() - $self->get("revisionDate"))) ||
$self->getThread->getParent->canEdit; $self->getThread->getParent->canEdit;
} }
@ -150,7 +146,7 @@ sub commit {
my $u = WebGUI::User->new($self->session, $self->get("ownerUserId")); my $u = WebGUI::User->new($self->session, $self->get("ownerUserId"));
$u->karma($self->getThread->getParent->get("karmaPerPost"), $self->getId, "Collaboration post"); $u->karma($self->getThread->getParent->get("karmaPerPost"), $self->getId, "Collaboration post");
} }
$self->getThread->incrementReplies($self->get("dateUpdated"),$self->getId) if ($self->isReply); $self->getThread->incrementReplies($self->get("revisionDate"),$self->getId) if ($self->isReply);
} }
} }
@ -176,15 +172,6 @@ sub definition {
fieldType=>"hidden", fieldType=>"hidden",
defaultValue=>undef defaultValue=>undef
}, },
dateSubmitted => {
noFormPost=>1,
fieldType=>"hidden",
defaultValue=>$session->datetime->time()
},
dateUpdated => {
fieldType=>"hidden",
defaultValue=>$session->datetime->time()
},
username => { username => {
fieldType=>"hidden", fieldType=>"hidden",
defaultValue=>$session->form->process("visitorUsername") || $session->user->profileField("alias") || $session->user->username defaultValue=>$session->form->process("visitorUsername") || $session->user->profileField("alias") || $session->user->username
@ -517,8 +504,8 @@ sub getTemplateVars {
$var{"user.isPoster"} = $self->isPoster; $var{"user.isPoster"} = $self->isPoster;
$var{"avatar.url"} = $self->getAvatarUrl; $var{"avatar.url"} = $self->getAvatarUrl;
$var{"userProfile.url"} = $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId")); $var{"userProfile.url"} = $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId"));
$var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("dateSubmitted")); $var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("creationDate"));
$var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("dateUpdated")); $var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("revisionDate"));
$var{'title.short'} = $self->chopTitle; $var{'title.short'} = $self->chopTitle;
$var{content} = $self->formatContent if ($self->getThread); $var{content} = $self->formatContent if ($self->getThread);
$var{'user.canEdit'} = $self->canEdit if ($self->getThread); $var{'user.canEdit'} = $self->canEdit if ($self->getThread);
@ -695,7 +682,7 @@ Returns a boolean indicating whether this post is new (not an edit).
sub isNew { sub isNew {
my $self = shift; my $self = shift;
return $self->get("dateSubmitted") eq $self->get("dateUpdated"); return $self->get("creationDate") == $self->get("revisionDate");
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1027,19 +1014,23 @@ Moves post to the trash and updates reply counter on thread.
=cut =cut
sub trash { sub trash {
my $self = shift; my $self = shift;
$self->SUPER::trash; $self->SUPER::trash;
$self->getThread->sumReplies if ($self->isReply); $self->getThread->sumReplies if ($self->isReply);
if ($self->getThread->get("lastPostId") eq $self->getId) { if ($self->getThread->get("lastPostId") eq $self->getId) {
my $threadLineage = $self->getThread->get("lineage"); my $threadLineage = $self->getThread->get("lineage");
my ($id, $date) = $self->session->db->quickArray("select Post.assetId, Post.dateSubmitted from Post, asset where asset.lineage like ".$self->session->db->quote($threadLineage.'%')." and Post.assetId<>".$self->session->db->quote($self->getId)." and asset.assetId=Post.assetId and asset.state='published' order by Post.dateSubmitted desc"); my ($id, $date) = $self->session->db->quickArray("select assetId, creationDate from asset where
$self->getThread->update({lastPostId=>$id, lastPostDate=>$date}); lineage like ? and assetId<>? and asset.state='published' and className like 'WebGUI::Asset::Post%'
} order by creationDate desc",[$threadLineage.'%', $self->getId]);
if ($self->getThread->getParent->get("lastPostId") eq $self->getId) { $self->getThread->update({lastPostId=>$id, lastPostDate=>$date});
my $forumLineage = $self->getThread->getParent->get("lineage"); }
my ($id, $date) = $self->session->db->quickArray("select Post.assetId, Post.dateSubmitted from Post, asset where asset.lineage like ".$self->session->db->quote($forumLineage.'%')." and Post.assetId<>".$self->session->db->quote($self->getId)." and asset.assetId=Post.assetId and asset.state='published' order by Post.dateSubmitted desc"); if ($self->getThread->getParent->get("lastPostId") eq $self->getId) {
$self->getThread->getParent->update({lastPostId=>$id, lastPostDate=>$date}); my $forumLineage = $self->getThread->getParent->get("lineage");
} my ($id, $date) = $self->session->db->quickArray("select assetId, creationDate from asset where
lineage like ? and assetId<>? and asset.state='published' and className like 'WebGUI::Asset::Post%'
order by creationDate desc",[$forumLineage.'%', $self->getId]);
$self->getThread->getParent->update({lastPostId=>$id, lastPostDate=>$date});
}
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------

View file

@ -63,7 +63,7 @@ sub commit {
my $self = shift; my $self = shift;
$self->SUPER::commit; $self->SUPER::commit;
if ($self->isNew) { if ($self->isNew) {
$self->getParent->incrementThreads($self->get("dateUpdated"),$self->getId); $self->getParent->incrementThreads($self->get("revisionDate"),$self->getId);
} }
} }
@ -623,6 +623,7 @@ sub setLastPost {
$self->getParent->setLastPost($id,$date); $self->getParent->setLastPost($id,$date);
} }
#-------------------------------------------------------------------
sub normalizeLastPost { sub normalizeLastPost {
my $self = shift; my $self = shift;
# Hmm. Is this right? # Hmm. Is this right?
@ -704,14 +705,21 @@ Moves thread to the trash and updates reply counter on thread.
=cut =cut
sub trash { sub trash {
my $self = shift; my $self = shift;
$self->SUPER::trash; $self->SUPER::trash;
$self->getParent->sumReplies; $self->getParent->sumReplies;
if ($self->getParent->get("lastPostId") eq $self->getId) { if ($self->getParent->get("lastPostId") eq $self->getId) {
my $parentLineage = $self->getThread->get("lineage"); my $parentLineage = $self->getThread->get("lineage");
my ($id, $date) = $self->session->db->quickArray("select Post.assetId, Post.dateSubmitted from Post, asset where asset.lineage like ".$self->session->db->quote($parentLineage.'%')." and Post.assetId<>".$self->session->db->quote($self->getId)." and Post.assetId=asset.assetId and asset.state='published' order by Post.dateSubmitted desc"); my ($id, $date) = $self->session->db->quickArray("select assetId, creationDate from asset where
$self->getParent->setLastPost('','') ? $self->getParent->setLastPost($id,$date) : $id; lineage like ? and assetId<>? and asset.state='published' and className like 'WebGUI::Asset::Post%'
order by creationDate desc",[$parentLineage.'%', $self->getId]);
if (defined $id) {
$self->getParent->setLastPost($id,$date);
} }
else {
$self->getParent->setLastPost('','');
}
}
} }
@ -884,10 +892,9 @@ sub view {
my $p = WebGUI::Paginator->new($self->session,$self->getUrl,$self->getParent->get("postsPerPage")); my $p = WebGUI::Paginator->new($self->session,$self->getUrl,$self->getParent->get("postsPerPage"));
my $sql = "select asset.assetId, asset.className, assetData.revisionDate as revisionDate, assetData.url as url from asset my $sql = "select asset.assetId, asset.className, assetData.revisionDate as revisionDate, assetData.url as url from asset
left join assetData on assetData.assetId=asset.assetId left join assetData on assetData.assetId=asset.assetId
left join Post on Post.assetId=assetData.assetId and assetData.revisionDate=Post.revisionDate
where asset.lineage like ".$self->session->db->quote($self->get("lineage").'%') where asset.lineage like ".$self->session->db->quote($self->get("lineage").'%')
." and asset.state='published' ." and asset.state='published'
and assetData.revisionDate=(SELECT max(revisionDate) from assetData where assetData.assetId=asset.assetId and assetData.revisionDate=(SELECT max(assetData.revisionDate) from assetData where assetData.assetId=asset.assetId
and ( and (
assetData.status in ('approved','archived') assetData.status in ('approved','archived')
or assetData.tagId=".$self->session->db->quote($self->session->scratch->get("versionTag")); or assetData.tagId=".$self->session->db->quote($self->session->scratch->get("versionTag"));
@ -898,7 +905,7 @@ sub view {
order by "; order by ";
if ($layout eq "flat") { if ($layout eq "flat") {
$sql .= "Post.dateSubmitted"; $sql .= "asset.creationDate";
} else { } else {
$sql .= "asset.lineage"; $sql .= "asset.lineage";
} }

View file

@ -93,15 +93,17 @@ sub appendPostListTemplateVars {
my $p = shift; my $p = shift;
my $page = $p->getPageData; my $page = $p->getPageData;
my $i = 0; my $i = 0;
my ($icon, $datetime) = $self->session->quick(qw(icon datetime));
foreach my $row (@$page) { foreach my $row (@$page) {
my $post = WebGUI::Asset->new($self->session,$row->{assetId}, $row->{className}, $row->{revisionDate}); my $post = WebGUI::Asset->new($self->session,$row->{assetId}, $row->{className}, $row->{revisionDate});
$post->{_parent} = $self; # caching parent for efficiency $post->{_parent} = $self; # caching parent for efficiency
my $controls = $self->session->icon->delete('func=delete',$post->get("url"),"Delete").$self->session->icon->edit('func=edit',$post->get("url")); my $controls = $icon->delete('func=delete',$post->get("url"),"Delete") . $icon->edit('func=edit',$post->get("url"));
if ($self->get("sortBy") eq "lineage") { if ($self->get("sortBy") eq "lineage") {
if ($self->get("sortOrder") eq "desc") { if ($self->get("sortOrder") eq "desc") {
$controls .= $self->session->icon->moveUp('func=demote',$post->get("url")).$self->session->icon->moveDown('func=promote',$post->get("url")); $controls .= $icon->moveUp('func=demote',$post->get("url")).$icon->moveDown('func=promote',$post->get("url"));
} else { }
$controls .= $self->session->icon->moveUp('func=promote',$post->get("url")).$self->session->icon->moveDown('func=demote',$post->get("url")); else {
$controls .= $icon->moveUp('func=promote',$post->get("url")).$icon->moveDown('func=demote',$post->get("url"));
} }
} }
my @rating_loop; my @rating_loop;
@ -114,13 +116,13 @@ sub appendPostListTemplateVars {
if ($self->get("displayLastReply")) { if ($self->get("displayLastReply")) {
my $lastPost = $post->getLastPost(); my $lastPost = $post->getLastPost();
%lastReply = ( %lastReply = (
"lastReply.url"=>$lastPost->getUrl.'#'.$lastPost->getId, "lastReply.url" => $lastPost->getUrl.'#'.$lastPost->getId,
"lastReply.title"=>$lastPost->get("title"), "lastReply.title" => $lastPost->get("title"),
"lastReply.user.isVisitor"=>$lastPost->get("ownerUserId") eq "1", "lastReply.user.isVisitor" => $lastPost->get("ownerUserId") eq "1",
"lastReply.username"=>$lastPost->get("username"), "lastReply.username" => $lastPost->get("username"),
"lastReply.userProfile.url"=>$lastPost->WebGUI::Asset::Post::getPosterProfileUrl(), "lastReply.userProfile.url" => $lastPost->getPosterProfileUrl(),
"lastReply.dateSubmitted.human"=>$self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%z"), "lastReply.dateSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%z"),
"lastReply.timeSubmitted.human"=>$self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%Z") "lastReply.timeSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%Z"),
); );
} }
$hasRead = $post->isMarkedRead; $hasRead = $post->isMarkedRead;
@ -133,32 +135,32 @@ sub appendPostListTemplateVars {
} }
my %postVars = ( my %postVars = (
%{$post->get}, %{$post->get},
"id"=>$post->getId, "id" => $post->getId,
"url"=>$url, "url" => $url,
rating_loop=>\@rating_loop, rating_loop => \@rating_loop,
"content"=>$post->formatContent, "content" => $post->formatContent,
"status"=>$post->getStatus, "status" => $post->getStatus,
"thumbnail"=>$post->getThumbnailUrl, "thumbnail" => $post->getThumbnailUrl,
"image.url"=>$post->getImageUrl, "image.url" => $post->getImageUrl,
"dateSubmitted.human"=>$self->session->datetime->epochToHuman($post->get("dateSubmitted"),"%z"), "dateSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%z"),
"dateUpdated.human"=>$self->session->datetime->epochToHuman($post->get("dateUpdated"),"%z"), "dateUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%z"),
"timeSubmitted.human"=>$self->session->datetime->epochToHuman($post->get("dateSubmitted"),"%Z"), "timeSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%Z"),
"timeUpdated.human"=>$self->session->datetime->epochToHuman($post->get("dateUpdated"),"%Z"), "timeUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%Z"),
"userProfile.url"=>$post->getPosterProfileUrl, "userProfile.url" => $post->getPosterProfileUrl,
"user.isVisitor"=>$post->get("ownerUserId") eq "1", "user.isVisitor" => $post->get("ownerUserId") eq "1",
"edit.url"=>$post->getEditUrl, "edit.url" => $post->getEditUrl,
'controls'=>$controls, 'controls' => $controls,
"isSecond"=>(($i+1)%2==0), "isSecond" => (($i+1)%2==0),
"isThird"=>(($i+1)%3==0), "isThird" => (($i+1)%3==0),
"isFourth"=>(($i+1)%4==0), "isFourth" => (($i+1)%4==0),
"isFifth"=>(($i+1)%5==0), "isFifth" => (($i+1)%5==0),
"user.hasRead" => $hasRead, "user.hasRead" => $hasRead,
"user.isPoster"=>$post->isPoster, "user.isPoster" => $post->isPoster,
"avatar.url"=>$post->getAvatarUrl, "avatar.url" => $post->getAvatarUrl,
%lastReply %lastReply
); );
$post->getTemplateMetadataVars(\%postVars); $post->getTemplateMetadataVars(\%postVars);
if ($row->{className} eq 'WebGUI::Asset::Post::Thread') { if ($row->{className} =~ m/^WebGUI::Asset::Post::Thread/) {
$postVars{'rating'} = $post->get('threadRating'); $postVars{'rating'} = $post->get('threadRating');
} }
push(@{$var->{post_loop}}, \%postVars ); push(@{$var->{post_loop}}, \%postVars );
@ -363,8 +365,8 @@ sub definition {
my %sortByOptions; my %sortByOptions;
tie %sortByOptions, 'Tie::IxHash'; tie %sortByOptions, 'Tie::IxHash';
%sortByOptions = (lineage=>$i18n->get('sequence'), %sortByOptions = (lineage=>$i18n->get('sequence'),
dateUpdated=>$i18n->get('date updated'), "assetData.revisionDate"=>$i18n->get('date updated'),
dateSubmitted=>$i18n->get('date submitted'), creationDate=>$i18n->get('date submitted'),
title=>$i18n->get('title'), title=>$i18n->get('title'),
userDefined1=>$i18n->get('user defined 1'), userDefined1=>$i18n->get('user defined 1'),
userDefined2=>$i18n->get('user defined 2'), userDefined2=>$i18n->get('user defined 2'),
@ -611,7 +613,7 @@ sub definition {
}, },
sortBy =>{ sortBy =>{
fieldType=>"selectBox", fieldType=>"selectBox",
defaultValue=>'dateUpdated', defaultValue=>'revisionDate',
tab=>'display', tab=>'display',
options=>\%sortByOptions, options=>\%sortByOptions,
label=>$i18n->get('sort by'), label=>$i18n->get('sort by'),
@ -829,7 +831,7 @@ SQL
'link' => $postUrl, 'link' => $postUrl,
guid => $postUrl, guid => $postUrl,
description => $post->get('synopsis'), description => $post->get('synopsis'),
pubDate => $datetime->epochToMail($post->get('dateUpdated')), pubDate => $datetime->epochToMail($post->get('revisionDate')),
attachmentLoop => $attachmentLoop, attachmentLoop => $attachmentLoop,
userDefined1 => $post->get("userDefined1"), userDefined1 => $post->get("userDefined1"),
userDefined2 => $post->get("userDefined2"), userDefined2 => $post->get("userDefined2"),
@ -942,7 +944,7 @@ sub getThreadsPaginator {
} }
$self->session->scratch->set($scratchSortOrder, $sortOrder); $self->session->scratch->set($scratchSortOrder, $sortOrder);
} }
$sortBy ||= "dateUpdated"; $sortBy ||= "revisionDate";
$sortOrder ||= "desc"; $sortOrder ||= "desc";
# Sort by the thread rating instead of the post rating. other places don't care about threads. # Sort by the thread rating instead of the post rating. other places don't care about threads.
if ($sortBy eq 'rating') { if ($sortBy eq 'rating') {
@ -1013,7 +1015,7 @@ sub getViewTemplateVars {
$var{'sortby.username.url'} = $self->getSortByUrl("username"); $var{'sortby.username.url'} = $self->getSortByUrl("username");
$var{'karmaIsEnabled'} = $self->session->setting->get("useKarma"); $var{'karmaIsEnabled'} = $self->session->setting->get("useKarma");
$var{'sortby.karmaRank.url'} = $self->getSortByUrl("karmaRank"); $var{'sortby.karmaRank.url'} = $self->getSortByUrl("karmaRank");
$var{'sortby.date.url'} = $self->getSortByUrl("dateSubmitted"); $var{'sortby.date.url'} = $self->getSortByUrl("creationDate");
$var{'sortby.lastreply.url'} = $self->getSortByUrl("lastPostDate"); $var{'sortby.lastreply.url'} = $self->getSortByUrl("lastPostDate");
$var{'sortby.views.url'} = $self->getSortByUrl("views"); $var{'sortby.views.url'} = $self->getSortByUrl("views");
$var{'sortby.replies.url'} = $self->getSortByUrl("replies"); $var{'sortby.replies.url'} = $self->getSortByUrl("replies");

View file

@ -119,9 +119,9 @@ sub view {
if (defined $lastPost) { if (defined $lastPost) {
%lastPostVars = ( %lastPostVars = (
'forum.lastPost.url' => $lastPost->getUrl, 'forum.lastPost.url' => $lastPost->getUrl,
'forum.lastPost.date' => $self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%z"), 'forum.lastPost.date' => $self->session->datetime->epochToHuman($lastPost->get("creationDate"),"%z"),
'forum.lastPost.time' => $self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%Z"), 'forum.lastPost.time' => $self->session->datetime->epochToHuman($lastPost->get("creationDate"),"%Z"),
'forum.lastPost.epoch' => $lastPost->get("dateSubmitted"), 'forum.lastPost.epoch' => $lastPost->get("creationDate"),
'forum.lastPost.subject' => $lastPost->get("title"), 'forum.lastPost.subject' => $lastPost->get("title"),
'forum.lastPost.user.hasRead' => $lastPost->getThread->isMarkedRead, 'forum.lastPost.user.hasRead' => $lastPost->getThread->isMarkedRead,
'forum.lastPost.user.id' => $lastPost->get("ownerUserId"), 'forum.lastPost.user.id' => $lastPost->get("ownerUserId"),