};
}
+ my $code = $params->{code};
+
+ # check name parameter
+ if (defined $params->{name}) {
+ my $message_types = $self->new_instance_of("Messages");
+ my $msg_type = $message_types->select(name => $params->{name});
+ if ($msg_type) {
+ $code = $msg_type->{message_type_id};
+ }
+ }
+
# single query
- if (defined $params->{code}) {
- my $code = $params->{code};
+ if (defined $code) {
my $rs = $code_table->{$code};
return if !$rs;
return \@rs;
}
+sub _is_mode_allowed {
+ # check given mode is selectable for the code
+ my ($self, $mode, $code) = @_;
+ return 1 if $mode < 0;
+
+ my $mode_bit = 1 << $mode;
+ my $messages = $self->new_instance_of('Messages');
+ my $msg_type = $messages->select(message_type_id => $code);
+ return if !$msg_type;
+
+ return $mode_bit & $msg_type->{selectable_mode};
+}
+
sub set {
my $self = shift;
return if $self->check_readonly;
my $uid = $params->{uid};
my $code = $params->{code};
my $mode = $params->{mode};
+
+ if (defined $params->{name}) {
+ my $message_types = $self->new_instance_of("Messages");
+ my $msg_type = $message_types->select(name => $params->{name});
+ if ($msg_type) {
+ $code = $msg_type->{message_type_id};
+ }
+ }
+
if (!$uid || !defined $code || !defined $mode) {
$self->set_error("uid, code and mode not given");
return;
}
+ # mode == -1 means no messages settings exists
if ($mode == -1) {
return $self->delete(uid => $uid, code => $code);
}
+ # check if mode is allowed
+ if (!$self->_is_mode_allowed($mode, $code)) {
+ return;
+ }
+
my $sql = "INSERT INTO users_messages (uid, code, mode) VALUES (?, ?, ?)" .
" ON DUPLICATE KEY UPDATE mode = ?";
my $dbh = $self->connect_db;
return $rs;
}
+# deprecated? use set method
sub update {
- my $self = shift;
- return if $self->check_readonly;
-
- # TODO: add "name" parameter support
-
- my $params = {@_};
- my $uid = $params->{uid};
- my $code = $params->{code};
- my $mode = $params->{mode};
- if (!$uid || !defined $code || !defined $mode) {
- $self->set_error("uid, code and mode not given");
- return;
- }
-
- # mode == -1 means no messages settings exists
- if ($mode == -1) {
- return $self->delete(uid => $uid, mode => $code);
- }
-
- my $rs = $self->generic_update(params => { mode => $mode },
- where => { uid => $uid, code => $code });
- return $rs;
+ shift->set(@_);
+
+ # my $self = shift;
+ # return if $self->check_readonly;
+
+ # my $params = {@_};
+ # my $uid = $params->{uid};
+ # my $code = $params->{code};
+ # my $mode = $params->{mode};
+
+ # if (defined $params->{name}) {
+ # my $message_types = $self->new_instance_of("Messages");
+ # my $msg_type = $message_types->select(name => $params->{name});
+ # if ($msg_type) {
+ # $code = $msg_type->{message_type_id};
+ # }
+ # }
+
+ # if (!$uid || !defined $code || !defined $mode) {
+ # $self->set_error("uid, mode code or name not given");
+ # return;
+ # }
+
+ # # mode == -1 means no messages settings exists
+ # if ($mode == -1) {
+ # return $self->delete(uid => $uid, mode => $code);
+ # }
+
+ # my $rs = $self->generic_update(params => { mode => $mode },
+ # where => { uid => $uid, code => $code });
+ # return $rs;
}
1;
# check options
if ($options->{message}) {
+ my $message_types = $self->app->model('messages');
for my $k (keys %{$options->{message}}) {
- my $message_name = $k;
- my $mode = $options->{message}->{$k};
- my $rs = $users->messages->update(uid => $uid, name => $message_name, mode => $mode);
+ my $rs = $users->messages->update(uid => $uid,
+ name => $k,
+ mode => $options->{message}->{$k});
if (!defined $rs) {
- $self->app->log->error("Users: message update failed! uid: $uid, name: $message_name, mode: $mode");
+ $self->app->log->error("Users: message update failed! uid: $uid, name: $k, mode: $options->{message}->{$k}");
}
}
}
code => 7,
mode => 1);
ok(defined $rs, "change notification mode");
- my $foo = $users->messages->generic_select();
-
my $msg = $users->messages->select(uid => $user2->{uid},
code => 7);
ok($msg, "get updateded message");
ok($msg->{mode} == 1, "message update succeeded");
diag Dumper $msg if $msg->{mode} != 1;
+ # update messages setting
+ $rs = $users->messages->set(uid => $user2->{uid},
+ name => "newsletter",
+ mode => 1);
+ ok(defined $rs, "change notification mode (2)");
+ $msg = $users->messages->select(uid => $user2->{uid},
+ name => "newsletter");
+ ok($msg, "get message info by name");
+ ok($msg->{mode} == 1, "message update succeeded");
+ diag Dumper $msg if $msg->{mode} != 1;
+
my $title = "this is test";
my $body = "this is test message.";
my $msg_id = $messages->create(from => $user1->{uid},
<span class="glyphicon glyphicon-ban-circle" aria-hidden="true">通知しない</span>
</button>
<button type="button" title="メールで通知"
+ v-if="conf.selectable_mode & 1 > 0"
:class="{active: (conf.mode == 0)}"
v-on:click="setMessageMode(conf.code, 0)">
<span class="glyphicon glyphicon-envelope" aria-hidden="true">メールで通知</span>
</button>
<button type="button" title="サイト上で通知"
- v-if="conf.selectable_mode > 1"
+ v-if="conf.selectable_mode & 2 > 0"
:class="{active: (conf.mode == 1)}"
v-on:click="setMessageMode(conf.code, 1)">
<span class="glyphicon glyphicon-comment" aria-hidden="true">サイト上で通知</span>