From 63d968874f76473f8b1a4d66aab9fef2f622ca44 Mon Sep 17 00:00:00 2001 From: hylom Date: Thu, 6 Oct 2016 22:33:18 +0900 Subject: [PATCH] Model: add Globjs --- src/newslash_web/lib/Newslash/Model/Globjs.pm | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/newslash_web/lib/Newslash/Model/Globjs.pm diff --git a/src/newslash_web/lib/Newslash/Model/Globjs.pm b/src/newslash_web/lib/Newslash/Model/Globjs.pm new file mode 100644 index 00000000..46c721f8 --- /dev/null +++ b/src/newslash_web/lib/Newslash/Model/Globjs.pm @@ -0,0 +1,72 @@ +package Newslash::Model::Globjs; +use Newslash::Model::Base -base; + +use Data::Dumper; +use Mojo::Log; + +## WORNING: +## This is worst legacy from slash. deprecated, and you can use only backword-compatible. + +sub getGlobjidCreate { + my($self, $name, $target_id, $options) = @_; + my $db; + my $globjid = $db->getGlobjidFromTargetIfExists($name, $target_id); + return $globjid if $globjid; + return $self->createGlobjid($name, $target_id); +} + +sub getGlobjTypes { + my ($self) = @_; + + my $dbh = $self->connect_db({AutoCommit => 0,}); + my $sql = "SELECT * from globj_types"; + my $sth = $dbh->prepare($sql); + $sth->execute(); + my $rs = $sth->fetchall_hashref('gtid'); + for my $gtid (keys %$rs) { + $rs->{$rs->{$gtid}} = $gtid; + } + $sth->finish; + $dbh->disconnect; + return $result; +} + +sub getGlobjidFromTargetIfExists { + my ($self, $name, $target_id) = @_; + return 0 if !$name || !$target_id; + + my $globjtypes = $self->getGlobjTypes(); + my $gtid = $globjtypes->{$name}; + return 0 if !$gtid; + + my $dbh = $self->connect_db({AutoCommit => 0,}); + my $sql = "SELECT * from globjs WHERE gtid = ? AND target_id = ?"; + my $sth = $dbh->prepare($sql); + $sth->execute($gtid, $target_id); + my $rs = $sth->fetchall_arrayref({}); + + if (@$rs == 0) { + return 0; + } + return $rs->[0]->{globijd}; +} + + +sub createGlobjid { + my ($self, $name, $target_id) = @_; + my $globjtypes = $self->getGlobjTypes; + my $gtid = $globjtypes->{$name}; + return 0 if !$gtid; + + my $dbh = $self->connect_db(); + my $sql = "INSERT INTO globjs (gtid, target_id) VALUES (?, ?)"; + my $result = $dbh->do($sql, undef, $gtid, $target_id); + if (!$result) { + return $self->getGlobjidFromTargetIfExists($name, $target_id); + } + my $globjid = $dbh->last_insert_id(undef, undef, undef, undef); + return $globjid; +} + + +1; -- 2.11.0