From: hylom Date: Mon, 21 Nov 2016 12:38:58 +0000 (+0900) Subject: Model::Users: support to get user sidebar information X-Git-Tag: v0.1.0~49 X-Git-Url: http://git.osdn.net/view?p=newslash%2Fnewslash.git;a=commitdiff_plain;h=98b1f0a10599d6d9d0490315a96424be5b975a3e Model::Users: support to get user sidebar information --- diff --git a/src/newslash_web/lib/Newslash/Model/Users.pm b/src/newslash_web/lib/Newslash/Model/Users.pm index 706a6f95..5b243652 100644 --- a/src/newslash_web/lib/Newslash/Model/Users.pm +++ b/src/newslash_web/lib/Newslash/Model/Users.pm @@ -5,6 +5,31 @@ use Digest::MD5 qw(md5_hex md5_base64); use Email::Valid; use Data::Dumper; + +use constant SIDEBAR_TABLE_NAME => 'ns_users_sidebar'; + +sub on_start_up { + my $self = shift; + my $table_name = SIDEBAR_TABLE_NAME; + if (!$self->table_exists($table_name)) { + my $dbh = $self->connect_db; + + my $sql = <<"EOSQL"; +CREATE TABLE IF NOT EXISTS $table_name ( + uid mediumint(8) unsigned NOT NULL UNIQUE, + items varchar(256) DEFAULT "" +) DEFAULT CHARSET=utf8mb4 +EOSQL + my $rs = $dbh->do($sql, undef); + $dbh->disconnect; + if ($rs) { + return 1; + } + } + $self->warn("cannot create table: $table_name"); + return; +} + sub authentification { my ($self, $nickname, $passwd) = @_; @@ -36,6 +61,21 @@ sub anonymous_user { return $self->select(uid => 1); } +sub sidebar_items { + my ($self, $key, $value) = @_; + return if ($key ne 'uid'); + my $boxes = $self->new_instance_of("Newslash::Model::Boxes"); + my $user_sidebar = $self->select(target => "sidebar", uid => $value); + my $items = $user_sidebar ? $user_sidebar->{items} : [1, 2]; + + my $user_boxes = []; + for my $box_id (@$items) { + my $box = $boxes->select(id => $box_id); + push @$user_boxes, $box; + } + return $user_boxes; +} + sub _create_user_object { my ($self, $user) = @_; @@ -104,24 +144,30 @@ sub select { $ret = $self->_select("users_acl", uid => $params{uid}); } } - - if ($type eq 'info') { + elsif ($type eq 'info') { if (exists $params{uid}) { $ret = $self->_select("users_info", uid => $params{uid}); } } - - if ($type eq 'comments') { + elsif ($type eq 'comments') { if (exists $params{uid}) { $ret = $self->_select("users_comments", uid => $params{uid}); } } - - if ($type eq 'param') { + elsif ($type eq 'param') { if (exists $params{uid}) { $ret = $self->_select("users_param", uid => $params{uid}); } } + elsif ($type eq 'sidebar') { + if (exists $params{uid}) { + $ret = $self->_select("ns_users_sidebar", uid => $params{uid}); + return if !$ret; + return if !@$ret; + my @items = split /\s+/, $ret->[0]->{items}; + return {uid => $ret->[0]->{uid}, items => \@items}; + } + } return if !$ret; return $ret->[0]; }