return $text_data->{id};
}
+sub setFireHose {
+ my($self, $id, $data) = @_;
+ #my $constants = getCurrentStatic();
+ return undef unless $id && $data;
+ return 0 if !%$data;
+ my $db = $self->new_instance_of('LegacyDB');
+ #my $id_q = $self->sqlQuote($id);
+ my $id_q = $db->sqlQuote($id);
+
+ #my $mcd = $self->getMCD();
+ #my $mcdkey;
+ #if ($mcd) {
+ # $mcdkey = "$self->{_mcd_keyprefix}:firehose";
+ #}
+
+ if (!exists($data->{last_update}) && !exists($data->{-last_update})) {
+ my @non_trivial = grep {!/^activity$/} keys %$data;
+ if (@non_trivial > 0) {
+ $data->{-last_update} = 'NOW()';
+ } else {
+ $data->{-last_update} = 'last_update';
+ }
+ }
+
+ # Admin notes used to be stored in firehose.note; that column is
+ # now gone and that data goes in globj_adminnote. The note is
+ # stored on the object that the firehose points to.
+ if (exists $data->{note}) {
+ my $note = delete $data->{note};
+ # XXX once getFireHose does caching, use that instead of an sqlSelect
+ #my $globjid = $self->sqlSelect('globjid', 'firehose', "id=$id_q");
+ my $globjid = $db->sqlSelect('globjid', 'firehose', "id=$id_q");
+ warn "no globjid for firehose '$id'" if !$globjid;
+ my $globjs = $self->new_instance_of('Globjs');
+ #$self->setGlobjAdminnote($globjid, $note);
+ $globjs->setGlobjAdminnote($globjid, $note);
+ }
+
+ return 0 if !keys %$data;
+
+ my $text_data = {};
+
+ $text_data->{title} = delete $data->{title} if exists $data->{title};
+ $text_data->{introtext} = delete $data->{introtext} if exists $data->{introtext};
+ $text_data->{bodytext} = delete $data->{bodytext} if exists $data->{bodytext};
+ $text_data->{media} = delete $data->{media} if exists $data->{media};
+
+ #my $rows = $self->sqlUpdate('firehose', $data, "id=$id_q");
+ my $rows = $db->sqlUpdate('firehose', $data, "id=$id_q");
+ #{ use Data::Dumper; my $dstr = Dumper($data); $dstr =~ s/\s+/ /g; print STDERR "setFireHose A rows=$rows for id=$id_q data: $dstr\n"; }
+ #$rows += $self->sqlUpdate('firehose_text', $text_data, "id=$id_q") if keys %$text_data;
+ $rows += $db->sqlUpdate('firehose_text', $text_data, "id=$id_q") if keys %$text_data;
+ #{ use Data::Dumper; my $dstr = Dumper($text_data); $dstr =~ s/\s+/ /g; print STDERR "setFireHose B rows=$rows for id=$id_q data: $dstr\n"; }
+
+ if (defined $data->{primaryskid}) {
+ my $type = $data->{type};
+ if (!$type) {
+ my $item = $self->getFireHose($id);
+ $type = $item->{type};
+ }
+ if ($type ne "story") {
+ $self->setTopicsRenderedBySkidForItem($id, $data->{primaryskid});
+ }
+ }
+
+ $self->deleteFireHoseCaches([ $id ], 1);
+
+ return $rows;
+}
+
+# getFireHose and getFireHoseMulti are the standard ways to retrieve
+# a firehose item's data, given its firehose id. It is recommended
+# that all item data retrieval bottleneck through here, to take full
+# advantage of caching.
+
+sub getFireHose {
+ my($self, $id, $options) = @_;
+ if ($id !~ /^\d+$/) {
+ return undef;
+ }
+ my $db = $new_instance_of('LegacyDB');
+ #my $hr = $self->getFireHoseMulti([$id], $options);
+ my $hr = $db->getFireHoseMulti([$id], $options);
+ return $hr->{$id};
+}
+
+sub setTopicsRenderedBySkidForItem {
+ my($self, $id, $primaryskid) = @_;
+ #my $constants = getCurrentStatic();
+ my $db = $new_instance_of('LegacyDB');
+ my $skins = $new_instance_of('Skins');
+
+ #my $skin = $self->getSkin($primaryskid);
+ my $skin = $skins->getSkin($primaryskid);
+
+ # if no primaryskid assign to mainpage skid
+ #my $nexus = $skin && $skin->{nexus} ? $skin->{nexus} : $constants->{mainpage_nexus_tid};
+ my $nexus = $skin && $skin->{nexus} ? $skin->{nexus} : 49;
+
+ #$self->sqlDelete("firehose_topics_rendered", "id = $id");
+ #$self->sqlInsert("firehose_topics_rendered", { id => $id, tid => $nexus });
+ #$self->setFireHose($id, { nexuslist => " $nexus " });
+ $db->sqlDelete("firehose_topics_rendered", "id = $id");
+ $db->sqlInsert("firehose_topics_rendered", { id => $id, tid => $nexus });
+ $db->setFireHose($id, { nexuslist => " $nexus " });
+}
+
1;