1 package Newslash::Model::Users::Messages;
2 use Newslash::Model::Base -base;
6 table => "users_messages",
8 other => [qw(uid code mode)],
9 aliases => { user_id => "uid",
17 my $uid = $params->{uid};
20 my $messages = $self->new_instance_of('Messages');
21 my $message_types = $messages->select_message_type;
23 my $settings = $self->generic_select(params => { uid => $uid });
27 for my $item (@$settings) {
28 $mode_of->{$item->{code}} = $item->{mode};
32 for my $type (@$message_types) {
33 next if $type->{selectable_mode} == 0;
35 description => $type->{description},
36 code => $type->{message_type_id},
38 if (defined $mode_of->{$type->{message_type_id}}) {
39 $i->{mode} = $mode_of->{$type->{message_type_id}};
42 $i->{mode} = -1; # 'no message'
44 $i->{selectable_mode} = $type->{selectable_mode};
53 return if $self->check_readonly;
55 my $uid = $params->{uid};
57 my $configs = $params->{config} || {};
59 my $sql_insert = <<"EOSQL";
60 INSERT INTO users_messages (uid, code, mode) VALUES (?, ?, ?)
61 ON DUPLICATE KEY UPDATE mode = ?
64 my $dbh = $self->start_transaction;
65 my $sth = $dbh->prepare($sql_insert);
67 for my $item (@$configs) {
68 my $rs = $sth->execute($uid, $item->{code}, $item->{mode}, $item->{mode});
70 $self->set_error($dbh->errstr, $dbh->err);
76 my $sql_cleanup = <<"EOSQL";
77 DELETE FROM users_messages WHERE uid = ? AND mode = -1
79 my $rs = $dbh->do($sql_cleanup, undef, $uid);
81 $self->set_error($dbh->errstr, $dbh->err);