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" },
16 my $uid = $params->{uid};
19 my $messages = $self->new_instance_of('Messages');
20 my $message_types = $messages->select_message_type;
23 for my $type (@$message_types) {
24 next if (!$type->{selectable_mode} && !$params->{select_all});
25 $code_table->{$type->{message_type_id}} = { description => $type->{description},
26 code => $type->{message_type_id},
27 selectable_mode => $type->{selectable_mode},
32 my $code = $params->{code};
34 # check name parameter
35 if (defined $params->{name}) {
36 my $message_types = $self->new_instance_of("Messages");
37 my $msg_type = $message_types->select(name => $params->{name});
39 $code = $msg_type->{message_type_id};
45 my $rs = $code_table->{$code};
48 my $settings = $self->generic_select(params => { uid => $uid,
51 $rs->{mode} = $settings->[0]->{mode};
57 my $settings = $self->generic_select(params => {uid => $uid});
58 return if !defined $settings;
60 for my $st (@$settings) {
61 my $code = $st->{code};
62 if ($code_table->{$code}) {
63 $code_table->{$code}->{mode} = $st->{mode};
67 my @rs = values %$code_table;
71 sub _is_mode_allowed {
72 # check given mode is selectable for the code
73 my ($self, $mode, $code) = @_;
74 return 1 if $mode < 0;
76 my $mode_bit = 1 << $mode;
77 my $messages = $self->new_instance_of('Messages');
78 my $msg_type = $messages->select(message_type_id => $code);
81 return $mode_bit & $msg_type->{selectable_mode};
86 return if $self->check_readonly;
89 my $uid = $params->{uid};
90 my $code = $params->{code};
91 my $mode = $params->{mode};
93 if (defined $params->{name}) {
94 my $message_types = $self->new_instance_of("Messages");
95 my $msg_type = $message_types->select(name => $params->{name});
97 $code = $msg_type->{message_type_id};
101 if (!$uid || !defined $code || !defined $mode) {
102 $self->set_error("uid, code and mode not given");
106 # mode == -1 means no messages settings exists
108 return $self->delete(uid => $uid, code => $code);
111 # check if mode is allowed
112 if (!$self->_is_mode_allowed($mode, $code)) {
116 my $sql = "INSERT INTO users_messages (uid, code, mode) VALUES (?, ?, ?)" .
117 " ON DUPLICATE KEY UPDATE mode = ?";
118 my $dbh = $self->connect_db;
119 my $rs = $dbh->do($sql, undef, $uid, $code, $mode, $mode);
120 $self->disconnect_db;
126 return if $self->check_readonly;
129 my $uid = $params->{uid};
130 my $code = $params->{code};
132 if (!$uid || !defined $code) {
133 $self->set_error("uid and code not given");
137 my $dbh = $self->connect_db;
138 my $sql_cleanup = <<"EOSQL";
139 DELETE FROM users_messages WHERE uid = ? AND code = ?
141 my $rs = $dbh->do($sql_cleanup, undef, $uid, $code);
142 $self->disconnect_db;
146 # deprecated? use set method
151 # return if $self->check_readonly;
154 # my $uid = $params->{uid};
155 # my $code = $params->{code};
156 # my $mode = $params->{mode};
158 # if (defined $params->{name}) {
159 # my $message_types = $self->new_instance_of("Messages");
160 # my $msg_type = $message_types->select(name => $params->{name});
162 # $code = $msg_type->{message_type_id};
166 # if (!$uid || !defined $code || !defined $mode) {
167 # $self->set_error("uid, mode code or name not given");
171 # # mode == -1 means no messages settings exists
173 # return $self->delete(uid => $uid, mode => $code);
176 # my $rs = $self->generic_update(params => { mode => $mode },
177 # where => { uid => $uid, code => $code });