OSDN Git Service

Model: add Globjs
authorhylom <hylom@users.sourceforge.jp>
Thu, 6 Oct 2016 13:33:18 +0000 (22:33 +0900)
committerhylom <hylom@users.sourceforge.jp>
Thu, 6 Oct 2016 13:33:18 +0000 (22:33 +0900)
src/newslash_web/lib/Newslash/Model/Globjs.pm [new file with mode: 0644]

diff --git a/src/newslash_web/lib/Newslash/Model/Globjs.pm b/src/newslash_web/lib/Newslash/Model/Globjs.pm
new file mode 100644 (file)
index 0000000..46c721f
--- /dev/null
@@ -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;