fix: Last Reply and Replies columns not updating
This commit is contained in:
parent
9167097d11
commit
ee85bc1e02
6 changed files with 100 additions and 87 deletions
|
|
@ -7,6 +7,7 @@
|
|||
- fix: wiki recent
|
||||
- fix: Dashboard content positioning field problem
|
||||
- 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: hover help doesn't appear for matrix fields
|
||||
- Collaboration systems should always tell browser there is new content
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ my $session = start(); # this line required
|
|||
|
||||
removeOrphanedGroupings($session); # upgrade functions go here
|
||||
fixDashboardContentPositions($session);
|
||||
fixPosts($session);
|
||||
|
||||
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 {
|
||||
my $session = shift;
|
||||
|
|
|
|||
|
|
@ -72,16 +72,12 @@ sub addRevision {
|
|||
my $now = time();
|
||||
if ($threadId eq "") { # new post
|
||||
if ($newSelf->getParent->isa("WebGUI::Asset::Wobject::Collaboration")) {
|
||||
$newSelf->update({threadId=>$newSelf->getId, dateSubmitted=>$now});
|
||||
$newSelf->update({threadId=>$newSelf->getId});
|
||||
} else {
|
||||
$newSelf->update({threadId=>$newSelf->getParent->get("threadId"), dateSubmitted=>$now});
|
||||
$newSelf->update({threadId=>$newSelf->getParent->get("threadId")});
|
||||
}
|
||||
delete $newSelf->{_thread};
|
||||
}
|
||||
$newSelf->update({
|
||||
dateUpdated=>$now,
|
||||
});
|
||||
|
||||
$newSelf->getThread->unmarkRead;
|
||||
|
||||
return $newSelf;
|
||||
|
|
@ -99,7 +95,7 @@ sub canEdit {
|
|||
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
|
||||
|
||||
($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;
|
||||
|
||||
}
|
||||
|
|
@ -150,7 +146,7 @@ sub commit {
|
|||
my $u = WebGUI::User->new($self->session, $self->get("ownerUserId"));
|
||||
$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",
|
||||
defaultValue=>undef
|
||||
},
|
||||
dateSubmitted => {
|
||||
noFormPost=>1,
|
||||
fieldType=>"hidden",
|
||||
defaultValue=>$session->datetime->time()
|
||||
},
|
||||
dateUpdated => {
|
||||
fieldType=>"hidden",
|
||||
defaultValue=>$session->datetime->time()
|
||||
},
|
||||
username => {
|
||||
fieldType=>"hidden",
|
||||
defaultValue=>$session->form->process("visitorUsername") || $session->user->profileField("alias") || $session->user->username
|
||||
|
|
@ -517,8 +504,8 @@ sub getTemplateVars {
|
|||
$var{"user.isPoster"} = $self->isPoster;
|
||||
$var{"avatar.url"} = $self->getAvatarUrl;
|
||||
$var{"userProfile.url"} = $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId"));
|
||||
$var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("dateSubmitted"));
|
||||
$var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("dateUpdated"));
|
||||
$var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("creationDate"));
|
||||
$var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("revisionDate"));
|
||||
$var{'title.short'} = $self->chopTitle;
|
||||
$var{content} = $self->formatContent 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 {
|
||||
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
|
||||
|
||||
sub trash {
|
||||
my $self = shift;
|
||||
$self->SUPER::trash;
|
||||
$self->getThread->sumReplies if ($self->isReply);
|
||||
if ($self->getThread->get("lastPostId") eq $self->getId) {
|
||||
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");
|
||||
$self->getThread->update({lastPostId=>$id, lastPostDate=>$date});
|
||||
}
|
||||
if ($self->getThread->getParent->get("lastPostId") eq $self->getId) {
|
||||
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");
|
||||
$self->getThread->getParent->update({lastPostId=>$id, lastPostDate=>$date});
|
||||
}
|
||||
my $self = shift;
|
||||
$self->SUPER::trash;
|
||||
$self->getThread->sumReplies if ($self->isReply);
|
||||
if ($self->getThread->get("lastPostId") eq $self->getId) {
|
||||
my $threadLineage = $self->getThread->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",[$threadLineage.'%', $self->getId]);
|
||||
$self->getThread->update({lastPostId=>$id, lastPostDate=>$date});
|
||||
}
|
||||
if ($self->getThread->getParent->get("lastPostId") eq $self->getId) {
|
||||
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});
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ sub commit {
|
|||
my $self = shift;
|
||||
$self->SUPER::commit;
|
||||
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);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub normalizeLastPost {
|
||||
my $self = shift;
|
||||
# Hmm. Is this right?
|
||||
|
|
@ -704,14 +705,21 @@ Moves thread to the trash and updates reply counter on thread.
|
|||
=cut
|
||||
|
||||
sub trash {
|
||||
my $self = shift;
|
||||
$self->SUPER::trash;
|
||||
$self->getParent->sumReplies;
|
||||
if ($self->getParent->get("lastPostId") eq $self->getId) {
|
||||
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");
|
||||
$self->getParent->setLastPost('','') ? $self->getParent->setLastPost($id,$date) : $id;
|
||||
my $self = shift;
|
||||
$self->SUPER::trash;
|
||||
$self->getParent->sumReplies;
|
||||
if ($self->getParent->get("lastPostId") eq $self->getId) {
|
||||
my $parentLineage = $self->getThread->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",[$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 $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 Post on Post.assetId=assetData.assetId and assetData.revisionDate=Post.revisionDate
|
||||
where asset.lineage like ".$self->session->db->quote($self->get("lineage").'%')
|
||||
." 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 (
|
||||
assetData.status in ('approved','archived')
|
||||
or assetData.tagId=".$self->session->db->quote($self->session->scratch->get("versionTag"));
|
||||
|
|
@ -898,7 +905,7 @@ sub view {
|
|||
order by ";
|
||||
|
||||
if ($layout eq "flat") {
|
||||
$sql .= "Post.dateSubmitted";
|
||||
$sql .= "asset.creationDate";
|
||||
} else {
|
||||
$sql .= "asset.lineage";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,15 +93,17 @@ sub appendPostListTemplateVars {
|
|||
my $p = shift;
|
||||
my $page = $p->getPageData;
|
||||
my $i = 0;
|
||||
my ($icon, $datetime) = $self->session->quick(qw(icon datetime));
|
||||
foreach my $row (@$page) {
|
||||
my $post = WebGUI::Asset->new($self->session,$row->{assetId}, $row->{className}, $row->{revisionDate});
|
||||
$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("sortOrder") eq "desc") {
|
||||
$controls .= $self->session->icon->moveUp('func=demote',$post->get("url")).$self->session->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"));
|
||||
$controls .= $icon->moveUp('func=demote',$post->get("url")).$icon->moveDown('func=promote',$post->get("url"));
|
||||
}
|
||||
else {
|
||||
$controls .= $icon->moveUp('func=promote',$post->get("url")).$icon->moveDown('func=demote',$post->get("url"));
|
||||
}
|
||||
}
|
||||
my @rating_loop;
|
||||
|
|
@ -114,13 +116,13 @@ sub appendPostListTemplateVars {
|
|||
if ($self->get("displayLastReply")) {
|
||||
my $lastPost = $post->getLastPost();
|
||||
%lastReply = (
|
||||
"lastReply.url"=>$lastPost->getUrl.'#'.$lastPost->getId,
|
||||
"lastReply.title"=>$lastPost->get("title"),
|
||||
"lastReply.user.isVisitor"=>$lastPost->get("ownerUserId") eq "1",
|
||||
"lastReply.username"=>$lastPost->get("username"),
|
||||
"lastReply.userProfile.url"=>$lastPost->WebGUI::Asset::Post::getPosterProfileUrl(),
|
||||
"lastReply.dateSubmitted.human"=>$self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%z"),
|
||||
"lastReply.timeSubmitted.human"=>$self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%Z")
|
||||
"lastReply.url" => $lastPost->getUrl.'#'.$lastPost->getId,
|
||||
"lastReply.title" => $lastPost->get("title"),
|
||||
"lastReply.user.isVisitor" => $lastPost->get("ownerUserId") eq "1",
|
||||
"lastReply.username" => $lastPost->get("username"),
|
||||
"lastReply.userProfile.url" => $lastPost->getPosterProfileUrl(),
|
||||
"lastReply.dateSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%z"),
|
||||
"lastReply.timeSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%Z"),
|
||||
);
|
||||
}
|
||||
$hasRead = $post->isMarkedRead;
|
||||
|
|
@ -133,32 +135,32 @@ sub appendPostListTemplateVars {
|
|||
}
|
||||
my %postVars = (
|
||||
%{$post->get},
|
||||
"id"=>$post->getId,
|
||||
"url"=>$url,
|
||||
rating_loop=>\@rating_loop,
|
||||
"content"=>$post->formatContent,
|
||||
"status"=>$post->getStatus,
|
||||
"thumbnail"=>$post->getThumbnailUrl,
|
||||
"image.url"=>$post->getImageUrl,
|
||||
"dateSubmitted.human"=>$self->session->datetime->epochToHuman($post->get("dateSubmitted"),"%z"),
|
||||
"dateUpdated.human"=>$self->session->datetime->epochToHuman($post->get("dateUpdated"),"%z"),
|
||||
"timeSubmitted.human"=>$self->session->datetime->epochToHuman($post->get("dateSubmitted"),"%Z"),
|
||||
"timeUpdated.human"=>$self->session->datetime->epochToHuman($post->get("dateUpdated"),"%Z"),
|
||||
"userProfile.url"=>$post->getPosterProfileUrl,
|
||||
"user.isVisitor"=>$post->get("ownerUserId") eq "1",
|
||||
"edit.url"=>$post->getEditUrl,
|
||||
'controls'=>$controls,
|
||||
"isSecond"=>(($i+1)%2==0),
|
||||
"isThird"=>(($i+1)%3==0),
|
||||
"isFourth"=>(($i+1)%4==0),
|
||||
"isFifth"=>(($i+1)%5==0),
|
||||
"user.hasRead" => $hasRead,
|
||||
"user.isPoster"=>$post->isPoster,
|
||||
"avatar.url"=>$post->getAvatarUrl,
|
||||
"id" => $post->getId,
|
||||
"url" => $url,
|
||||
rating_loop => \@rating_loop,
|
||||
"content" => $post->formatContent,
|
||||
"status" => $post->getStatus,
|
||||
"thumbnail" => $post->getThumbnailUrl,
|
||||
"image.url" => $post->getImageUrl,
|
||||
"dateSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%z"),
|
||||
"dateUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%z"),
|
||||
"timeSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%Z"),
|
||||
"timeUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%Z"),
|
||||
"userProfile.url" => $post->getPosterProfileUrl,
|
||||
"user.isVisitor" => $post->get("ownerUserId") eq "1",
|
||||
"edit.url" => $post->getEditUrl,
|
||||
'controls' => $controls,
|
||||
"isSecond" => (($i+1)%2==0),
|
||||
"isThird" => (($i+1)%3==0),
|
||||
"isFourth" => (($i+1)%4==0),
|
||||
"isFifth" => (($i+1)%5==0),
|
||||
"user.hasRead" => $hasRead,
|
||||
"user.isPoster" => $post->isPoster,
|
||||
"avatar.url" => $post->getAvatarUrl,
|
||||
%lastReply
|
||||
);
|
||||
$post->getTemplateMetadataVars(\%postVars);
|
||||
if ($row->{className} eq 'WebGUI::Asset::Post::Thread') {
|
||||
if ($row->{className} =~ m/^WebGUI::Asset::Post::Thread/) {
|
||||
$postVars{'rating'} = $post->get('threadRating');
|
||||
}
|
||||
push(@{$var->{post_loop}}, \%postVars );
|
||||
|
|
@ -363,8 +365,8 @@ sub definition {
|
|||
my %sortByOptions;
|
||||
tie %sortByOptions, 'Tie::IxHash';
|
||||
%sortByOptions = (lineage=>$i18n->get('sequence'),
|
||||
dateUpdated=>$i18n->get('date updated'),
|
||||
dateSubmitted=>$i18n->get('date submitted'),
|
||||
"assetData.revisionDate"=>$i18n->get('date updated'),
|
||||
creationDate=>$i18n->get('date submitted'),
|
||||
title=>$i18n->get('title'),
|
||||
userDefined1=>$i18n->get('user defined 1'),
|
||||
userDefined2=>$i18n->get('user defined 2'),
|
||||
|
|
@ -611,7 +613,7 @@ sub definition {
|
|||
},
|
||||
sortBy =>{
|
||||
fieldType=>"selectBox",
|
||||
defaultValue=>'dateUpdated',
|
||||
defaultValue=>'revisionDate',
|
||||
tab=>'display',
|
||||
options=>\%sortByOptions,
|
||||
label=>$i18n->get('sort by'),
|
||||
|
|
@ -829,7 +831,7 @@ SQL
|
|||
'link' => $postUrl,
|
||||
guid => $postUrl,
|
||||
description => $post->get('synopsis'),
|
||||
pubDate => $datetime->epochToMail($post->get('dateUpdated')),
|
||||
pubDate => $datetime->epochToMail($post->get('revisionDate')),
|
||||
attachmentLoop => $attachmentLoop,
|
||||
userDefined1 => $post->get("userDefined1"),
|
||||
userDefined2 => $post->get("userDefined2"),
|
||||
|
|
@ -942,7 +944,7 @@ sub getThreadsPaginator {
|
|||
}
|
||||
$self->session->scratch->set($scratchSortOrder, $sortOrder);
|
||||
}
|
||||
$sortBy ||= "dateUpdated";
|
||||
$sortBy ||= "revisionDate";
|
||||
$sortOrder ||= "desc";
|
||||
# Sort by the thread rating instead of the post rating. other places don't care about threads.
|
||||
if ($sortBy eq 'rating') {
|
||||
|
|
@ -1013,7 +1015,7 @@ sub getViewTemplateVars {
|
|||
$var{'sortby.username.url'} = $self->getSortByUrl("username");
|
||||
$var{'karmaIsEnabled'} = $self->session->setting->get("useKarma");
|
||||
$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.views.url'} = $self->getSortByUrl("views");
|
||||
$var{'sortby.replies.url'} = $self->getSortByUrl("replies");
|
||||
|
|
|
|||
|
|
@ -119,9 +119,9 @@ sub view {
|
|||
if (defined $lastPost) {
|
||||
%lastPostVars = (
|
||||
'forum.lastPost.url' => $lastPost->getUrl,
|
||||
'forum.lastPost.date' => $self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%z"),
|
||||
'forum.lastPost.time' => $self->session->datetime->epochToHuman($lastPost->get("dateSubmitted"),"%Z"),
|
||||
'forum.lastPost.epoch' => $lastPost->get("dateSubmitted"),
|
||||
'forum.lastPost.date' => $self->session->datetime->epochToHuman($lastPost->get("creationDate"),"%z"),
|
||||
'forum.lastPost.time' => $self->session->datetime->epochToHuman($lastPost->get("creationDate"),"%Z"),
|
||||
'forum.lastPost.epoch' => $lastPost->get("creationDate"),
|
||||
'forum.lastPost.subject' => $lastPost->get("title"),
|
||||
'forum.lastPost.user.hasRead' => $lastPost->getThread->isMarkedRead,
|
||||
'forum.lastPost.user.id' => $lastPost->get("ownerUserId"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue