OSDN Git Service

Model::Firehose: add 'setFireHose', 'getFireHose', 'setTopicsRenderedBySkidForItem...
authorhylom <hylom@users.sourceforge.jp>
Fri, 21 Oct 2016 18:07:25 +0000 (03:07 +0900)
committerhylom <hylom@users.sourceforge.jp>
Fri, 21 Oct 2016 18:07:25 +0000 (03:07 +0900)
src/newslash_web/lib/Newslash/Model/Firehose.pm

index 261ce05..f15b9df 100644 (file)
@@ -81,4 +81,111 @@ sub createFireHose {
     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;