OSDN Git Service

Model::Users: support to get user sidebar information
authorhylom <hylom@users.sourceforge.jp>
Mon, 21 Nov 2016 12:38:58 +0000 (21:38 +0900)
committerhylom <hylom@users.sourceforge.jp>
Mon, 21 Nov 2016 12:38:58 +0000 (21:38 +0900)
src/newslash_web/lib/Newslash/Model/Users.pm

index 706a6f9..5b24365 100644 (file)
@@ -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];
 }