From da91140da5458ae46477c3df54dbe41684710eeb Mon Sep 17 00:00:00 2001 From: hylom Date: Mon, 9 Oct 2017 23:27:26 +0900 Subject: [PATCH] * Model::Users: select() now fallback to _select_user() --- src/newslash_web/lib/Newslash/Model/Users.pm | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/newslash_web/lib/Newslash/Model/Users.pm b/src/newslash_web/lib/Newslash/Model/Users.pm index 2f079c54..649d31fb 100644 --- a/src/newslash_web/lib/Newslash/Model/Users.pm +++ b/src/newslash_web/lib/Newslash/Model/Users.pm @@ -179,6 +179,9 @@ sub select { elsif (exists $params{author}) { $user = $self->_select("users", author => $params{author}); } + else { + return $self->_select_user(\%params); + } if ($user) { return $self->_create_user_object($user); } @@ -458,6 +461,65 @@ sub _select { return $rs; } +sub _select_user { + my ($self, $params) = @_; + + my $unique_keys = { id => "users.uid", + uid => "users.uid", + nickname => "users.nickname", + matchname => "users.matchname", + }; + my $keys = { realemail => "users.realemail", + fakeemail => "users.fakeemail", + seclev => "users.seclev", + security_level => "users.seclev", + author => "users.author", + }; + my $datetime_keys = { journal_last_entry_date => "users.journal_last_entry_date", + newpasswd_ts => "users.newpasswd_ts", + }; + + my ($where_clause, $where_values, $unique) = $self->build_where_clause(unique_keys => $unique_keys, + keys => $keys, + datetime_keys => $datetime_keys, + params => $params); + my ($limit_clause, $limit_values) = $self->build_limit_clause(params => $params); + my ($orderby_clause, $orderby_values) = $self->build_order_by_clause(unique_keys => $unique_keys, + keys => $keys, + params => $params); + + # TODO: give reasonable LIMIT Value... + $limit_clause = "LIMIT 50" if !$limit_clause; + + my @attrs; + push @attrs, @$where_values, @$limit_values, @$orderby_values; + + my $dbh = $self->connect_db; + my $sql = <<"EOSQL"; +SELECT * from users + $where_clause + $orderby_clause + $limit_clause +EOSQL + + my $sth = $dbh->prepare($sql); + $sth->execute(@attrs); + my $users = $sth->fetchall_arrayref({}); + + if (!$users) { + $self->disconnect_db; + return; + } + if (@$users == 0) { + $self->disconnect_db; + return $unique ? undef : []; + } + + return $users->[0] if $unique; + return $users; + +} + sub _acl2 { return shift->new_instance_of("::Users::ACL2"); } sub acl2_types { return shift->_acl2->acl2_types; } -- 2.11.0