OSDN Git Service

Model:Users: rewrite "select" method to query users_* db
authorhylom <hylom@users.sourceforge.jp>
Thu, 20 Oct 2016 12:32:44 +0000 (21:32 +0900)
committerhylom <hylom@users.sourceforge.jp>
Thu, 20 Oct 2016 12:33:12 +0000 (21:33 +0900)
src/newslash_web/lib/Newslash/Model/Users.pm

index cad5e77..4233361 100644 (file)
@@ -72,32 +72,139 @@ sub _create_user_object {
 }
 
 sub select {
-    my ($self, $key, $value) = @_;
-    my $user;
+    my $self = shift @_;
+    my %params = @_;
+
+    my $type = $params{target} || 'user';
+
+    if ($type eq 'user') {
+        my $user;
+        if (exists $params{nickname}) {
+            $user = $self->_get(nickname => $params{nickname});
+        }
+        elsif (exists $params{uid}) {
+            $user = $self->_get(uid => $params{uid});
+        }
+        elsif (exists $params{matchname}) {
+            $user = $self->_get(matchname => $params{matchname});
+        }
+        elsif (exists $params{email}) {
+            $user = $self->_get(realemail => $params{email});
+        }
 
-    if ($key eq 'nickname') {
-        $user = $self->_get(nickname => $value);
+        if ($user) {
+            return $self->_create_user_object($user);
+        }
+        return;
     }
 
-    if ($key eq 'uid') {
-        $user = $self->_get(uid => $value);
+    if ($type eq 'acl') {
+        my $acl;
+        if (exists $params{uid}) {
+            $params = $self->_acl(uid => $params{uid});
+        }
+        return $acl;
     }
 
-    if ($key eq 'matchname') {
-        $user = $self->_get(matchname => $value);
+    if ($type eq 'info') {
+        my $info;
+        if (exists $params{uid}) {
+            $params = $self->_info(uid => $params{uid});
+        }
+        return $info;
     }
 
-    if ($key eq 'email') {
-        $user = $self->_get(realemail => $value);
+    if ($type eq 'comments') {
+        my $comments;
+        if (exists $params{uid}) {
+            $params = $self->_comments(uid => $params{uid});
+        }
+        return $comments;
     }
 
-    if ($user) {
-        return $self->_create_user_object($user);
+    if ($type eq 'param') {
+        my $params;
+        if (exists $params{uid}) {
+            $params = $self->_param(uid => $params{uid});
+        }
+        return $params;
     }
 
-    return undef;
+    return;
 }
 
+sub _select_rows {
+    my ($self, $sql, $key, $value) = @_;
+
+    my $dbh = $self->connect_db;
+    my $sth = $dbh->prepare($sql);
+    $sth->execute($key, $value);
+    my $rs = $sth->fetchall_arrayref({});
+
+    $sth->finish;
+    $dbh->disconnect();
+
+    return $rs;
+}
+
+sub _acl {
+    my ($self, $key, $value) = @_;
+    my $sql = <<"EOSQL";
+SELECT * FROM users_acl
+  WHERE ? = ?
+EOSQL
+    my $rs = $self->_select_rows($sql, $key, $value);
+    return if (@$rs == 0);
+
+    my $ret = $rs->[0];
+    return $ret;
+}
+
+sub _info {
+    my ($self, $key, $value) = @_;
+    my $sql = <<"EOSQL";
+SELECT * FROM users_info
+  WHERE ? = ?
+EOSQL
+    my $rs = $self->_select_rows($sql, $key, $value);
+    return if (@$rs == 0);
+
+    my $ret = $rs->[0];
+    return $ret;
+}
+
+sub _comments {
+    my ($self, $key, $value) = @_;
+    my $sql = <<"EOSQL";
+SELECT * FROM users_comments
+  WHERE ? = ?
+EOSQL
+    my $rs = $self->_select_rows($sql, $key, $value);
+    return if (@$rs == 0);
+
+    my $ret = $rs->[0];
+    return $ret;
+}
+
+sub _param {
+    my ($self, $key, $value) = @_;
+    my $sql = <<"EOSQL";
+SELECT param_id, name, value FROM users_param
+  WHERE ? = ?
+EOSQL
+
+    my $dbh = $self->connect_db;
+    my $sth = $dbh->prepare($sql);
+    $sth->execute($key, $value);
+    my $rs = $sth->fetchall_hashref('name');
+
+    $sth->finish;
+    $dbh->disconnect();
+
+    return $rs;
+}
+
+
 #========================================================================
 
 =head2 _get_salt
@@ -400,4 +507,5 @@ EOSQL
     return { error => 0, uid => $uid, password => $passwd };
 }
 
+
 1;