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);
}
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; }