package Newslash::Model::Tags;
#use Newslash::Model::Base -base;
use base Newslash::Model::LegacyDB;
+use Data::Dumper;
+use List::Util;
+
+use constant RESERVED_TAG_NAMES => [qw(metanix
+ metanod
+ nix
+ nod
+ poll
+ おもしろおかしい
+ すばらしい洞察
+ オフトピック
+ フレームのもと
+ 不当プラスモデ
+ 不当マイナスモデ
+ 余計なもの
+ 参考になる
+ 既出
+ 興味深い
+ 荒し
+ 荒らし
+ story
+ journal
+ comment
+ submission
+ )];
+
+sub is_reserved_name {
+ my ($self, $tag_name) = @_;
+ return any { $tag_name eq $_ } RESERVED_TAG_NAMES;
+}
+
+sub select_for_items {
+ my ($self, $type, $primary_key, $items) = @_;
+ return if !$items;
+
+ if (ref($items) ne "ARRAY") {
+ $items = [$items];
+ }
+ return if !@$items;
+
+ my @target_ids = map { $_->{$primary_key} } @$items;
+ my @placeholders = map { "?" } @target_ids;
+ my $placeholder = join(", ", @placeholders);
+
+ my $globjs = $self->new_instance_of("Globjs");
+ my $gtid = $globjs->get_gtid($type);
+ return if !$gtid;
+
+ my $sql = <<"EOSQL";
+SELECT * FROM globjs
+ JOIN tags ON globjs.globjid = tags.globjid
+ JOIN tagnames ON tags.tagnameid = tagnames.tagnameid
+ WHERE globjs.gtid = ? AND globjs.target_id IN ($placeholder)
+EOSQL
+ my $dbh = $self->connect_db;
+ my $sth = $dbh->prepare($sql);
+ $sth->execute($gtid, @target_ids);
+ my $rs = $sth->fetchall_arrayref({});
+ $self->disconnect_db;
+
+ return if !$rs;
+
+ my $tags_of = {};
+ for my $tag (@$rs) {
+ my $id = $tag->{target_id};
+ $tags_of->{$id} = [] if !$tags_of->{$id};
+ push @{$tags_of->{$id}}, $tag;
+ }
+ return $tags_of;
+}
sub get_topics {
my ($self, ) = @_;