Skip to content

Commit

Permalink
Updates for related comments
Browse files Browse the repository at this point in the history
  • Loading branch information
tvroom committed Jun 28, 2006
1 parent 04f82b4 commit 8b50c61
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 13 deletions.
58 changes: 53 additions & 5 deletions Slash/DB/MySQL/MySQL.pm
Expand Up @@ -13570,18 +13570,20 @@ sub getRelatedStoriesForStoid {
"*",
"related_stories",
"stoid=$stoid_q",
"ORDER BY rel_sid desc"
"ORDER BY ordernum asc"
);
}

sub setRelatedStoriesForStory {
my($self, $sid_or_stoid, $rel_sid_hr, $rel_url_hr) = @_;
my($self, $sid_or_stoid, $rel_sid_hr, $rel_url_hr, $rel_cid_hr) = @_;
my $stoid = $self->getStoidFromSidOrStoid($sid_or_stoid);
my $stoid_q = $self->sqlQuote($stoid);
my $story = $self->getStory($stoid);

my $prev_rel_stories = $self->getRelatedStoriesForStoid($stoid);

my @unparented_cids;

foreach my $prev_rel (@$prev_rel_stories) {
if ($prev_rel->{rel_stoid}) {
my $rel_stoid_q = $self->sqlQuote($prev_rel->{rel_stoid});
Expand All @@ -13590,35 +13592,81 @@ sub setRelatedStoriesForStory {
}

$self->sqlDelete("related_stories", "stoid = $stoid_q");

foreach my $rel_cid (keys %$rel_cid_hr) {
my $disc = $self->getDiscussion($rel_cid_hr->{$rel_cid}{sid});
if ($disc->{sid} && !$rel_sid_hr->{$disc->{sid}}) {
$rel_sid_hr->{$disc->{sid}} = $self->getStory($disc->{sid});
}
if ($disc->{sid}) {
push @{$rel_sid_hr->{$disc->{sid}}{cids}}, $rel_cid;
} else {
push @unparented_cids, $rel_cid;
}
}

foreach my $rel (keys %$rel_sid_hr) {
my $i = 1;
foreach my $rel (sort keys %$rel_sid_hr) {
my $rel_stoid = $self->getStoidFromSidOrStoid($rel);
$self->sqlInsert("related_stories", {
stoid => $stoid,
rel_sid => $rel,
rel_stoid => $rel_stoid
rel_stoid => $rel_stoid,
ordernum => $i
});

$i++;

if ($rel_sid_hr->{$rel}{cids}) {
foreach my $cid (sort {$a <=> $b } @{$rel_sid_hr->{$rel}{cids}}) {
$self->sqlInsert("related_stories", {
stoid => $stoid,
cid => $cid,
ordernum => $i
});
$i++;
}
}

# Insert reciprocal link if it doesn't already exist
my $rel_stoid_q = $self->sqlQuote($rel_stoid);
my $ordnum = $self->sqlSelect("MAX(ordernum)", "related_stories", "stoid= $rel_stoid_q AND (url='' or url is null)") || 0;
$self->sqlUpdate("related_stories", {
-ordernum => "ordernum + 1"
}, "(url != '' OR url is not null) AND stoid = $rel_stoid_q"
);
$ordnum++;
my $sid_q = $self->sqlQuote($story->{sid});
if (!$self->sqlCount("related_stories", "stoid = $rel_stoid_q AND rel_sid = $sid_q")) {
$self->sqlInsert("related_stories", {
stoid => $rel_stoid,
rel_sid => $story->{sid},
rel_stoid => $stoid,
ordernum => $ordnum
});
$self->markStoryDirty($rel_stoid);
}
}

foreach my $cid (sort {$a <=> $b } @unparented_cids) {
$self->sqlInsert("related_stories", {
stoid => $stoid,
cid => $cid,
ordernum => $i,
});
$i++;
}

foreach my $rel_url (keys %$rel_url_hr) {
$self->sqlInsert("related_stories", {
stoid => $stoid,
url => $rel_url,
title => $rel_url_hr->{$rel_url},
})
ordernum => $i
});
$i++;
}

}

sub updateSubMemory {
Expand Down
39 changes: 31 additions & 8 deletions plugins/Admin/admin.pl
Expand Up @@ -1166,9 +1166,10 @@ sub editStory {
$storyref->{dept} =~ s/^-//;
$storyref->{dept} =~ s/-$//;

my($related_sids_hr, $related_urls_hr) = extractRelatedStoriesFromForm($form);
my($related_sids_hr, $related_urls_hr, $related_cids_hr) = extractRelatedStoriesFromForm($form);
$storyref->{related_sids_hr} = $related_sids_hr;
$storyref->{related_urls_hr} = $related_urls_hr;
$storyref->{related_cids_hr} = $related_cids_hr;
my($chosen_hr) = extractChosenFromForm($form);
$storyref->{topics_chosen} = $chosen_hr;
my $rendered_hr = $slashdb->renderTopics($chosen_hr);
Expand Down Expand Up @@ -1218,18 +1219,22 @@ sub editStory {
$user->{currentSkin} = $storyref->{skin}{name};

my $related = $slashdb->getRelatedStoriesForStoid($storyref->{stoid});
my(@related_sids);
my(@related_sids, @related_cids);

foreach my $related (@$related) {
if ($related->{rel_sid}) {
push @related_sids, $related->{rel_sid} if $related->{rel_sid};
} elsif ($related->{cid}) {
push @related_cids, $related->{cid};
} elsif ($related->{url}) {
$storyref->{related_urls_hr}{$related->{url}} = $related->{title};
}
}

my %related_sids = map { $_ => $slashdb->getStory($_) } @related_sids;
my %related_cids = map { $_ => $slashdb->getComment($_) } @related_cids;
$storyref->{related_sids_hr} = \%related_sids;
$storyref->{related_cids_hr} = \%related_cids;

$sid = $storyref->{sid};
$storyref->{is_dirty} = 1;
Expand Down Expand Up @@ -1430,6 +1435,9 @@ sub editStory {
}

my $add_related_text;
foreach (keys %{$storyref->{related_cids_hr}}) {
# $add_related_text .= "cid=$_\n";
}
foreach (keys %{$storyref->{related_urls_hr}}) {
$add_related_text .= "$storyref->{related_urls_hr}{$_} $_\n";
}
Expand Down Expand Up @@ -1486,26 +1494,38 @@ sub extractRelatedStoriesFromForm {
my %related_urls;

my %related_urls_hr;
my $related;
my %related_cids_hr;

my($related, $related_cids);
if (ref($form->{_multi}{related_story}) eq 'ARRAY') {
$related = $form->{_multi}{related_story};
} elsif ($form->{related_story}) {
$related = [ $form->{related_story} ];
}

if (ref($form->{_multi}{related_comment}) eq 'ARRAY') {
$related_cids = $form->{_multi}{related_comment};
} elsif ($form->{related_comment}) {
$related_cids = [ $form->{related_comment} ];
}

# XXX this is broken because regexSid() matches things other than sid
# but in theory, should use regexSid() ...
# my $regexsid = regexSid();

my $match = qr/(?:$constants->{basedomain})?\S*(\d\d\/\d\d\/\d\d\/\d+)/;
my $match_cid = qr/(?:$constants->{basedomain})?\S*cid=(\d+)/;

if ($form->{add_related}) {
my @add_related = split('\n', $form->{add_related});
foreach (@add_related) {
s/^\s+|\s+$//g;
next if !$_;
# XXX should use regexSid()
if ($_ =~ $match) {

if ($_ =~ /cid=(\d+)/) {
push @$related_cids, $1;
} elsif ($_ =~ $match) {
# XXX should use regexSid()
push @$related, $1;
} else {
my($title, $url) = $_ =~ /^(.*)\s+(\S+)$/;
Expand All @@ -1518,11 +1538,14 @@ sub extractRelatedStoriesFromForm {
# Extract sids from urls in introtext and bodytext
foreach ($form->{introtext}, $form->{bodytext}) {
push @$related, $1 while /$match/g;
push @$related_cids, $1 while /$match_cid/g;
}

# should probably filter and check that they're actually sids, etc...
my %related_sids = map { $_ => $slashdb->getStory($_) } grep { $_ } @$related;
return(\%related_sids, \%related_urls);
my %related_cids = map { $_ => $slashdb->getComment($_) } grep {$_} @$related_cids;

return(\%related_sids, \%related_urls, \%related_cids);
}


Expand Down Expand Up @@ -1910,7 +1933,7 @@ sub updateStory {
unless $form->{aid};

my($chosen_hr) = extractChosenFromForm($form);
my($related_sids_hr, $related_urls_hr) = extractRelatedStoriesFromForm($form);
my($related_sids_hr, $related_urls_hr, $related_cids_hr) = extractRelatedStoriesFromForm($form);
my $related_sids = join ',', keys %$related_sids_hr;
my($topic) = $slashdb->getTopiclistFromChosen($chosen_hr);
#use Data::Dumper; print STDERR "admin.pl updateStory chosen_hr: " . Dumper($chosen_hr) . "admin.pl updateStory form: " . Dumper($form);
Expand Down Expand Up @@ -1986,7 +2009,7 @@ sub updateStory {
editStory(@_);
} else {
titlebar('100%', getTitle('updateStory-title'));
$slashdb->setRelatedStoriesForStory($form->{sid}, $related_sids_hr, $related_urls_hr);
$slashdb->setRelatedStoriesForStory($form->{sid}, $related_sids_hr, $related_urls_hr, $related_cids_hr);
my $st = $slashdb->getStory($form->{sid});
$slashdb->createSignoff($st->{stoid}, $user->{uid}, "updated");
# make sure you pass it the goods
Expand Down

0 comments on commit 8b50c61

Please sign in to comment.