diff --git a/lib/CF/Controller/Posts.pm b/lib/CF/Controller/Posts.pm index 1745de58abea45758aea87cdab8b77b4951a54e1..384b0bfd4a018b4adacd789db8c1ea9bf0150993 100644 --- a/lib/CF/Controller/Posts.pm +++ b/lib/CF/Controller/Posts.pm @@ -5,6 +5,13 @@ use Mojo::Pg::PubSub; use feature 'signatures'; no warnings qw{ experimental::signatures }; +# TODO: do modelu +use constant STATUS_ANNOUNCEMENTS => { + 1 => 1, # prijatelny n.p. + 2 => 2, # schvaleny n.p. + 3 => 0, # zamitnuty n.p. +}; + sub create ($c) { $c->openapi->valid_input or return; @@ -165,6 +172,33 @@ sub update ($c) { my $pubsub = Mojo::Pg::PubSub->new(pg => $c->pg); my $guard = $c->schema->txn_scope_guard; + if ( $update->{state} && $post->state != $update->{state} ) { + my $announcement_type = STATUS_ANNOUNCEMENTS->{ $args->{state} }; + + #TODO: do modelu + my $msg = $c->schema->resultset('Announcement')->from_template( + $announcement_type, + $post->user->name, + $post->content, + ); + + my $announcement = $c->schema->resultset('Announcement')->create({ + user_id => $c->user->{id}, + type => $announcement_type, + content => $msg, + }); + + # potrebujeme kvuli datumu + $announcement = $c->schema->resultset('Announcement')->find({ + id => $announcement->id + }); + + $pubsub->json('notify')->notify( notify => { + event => 'announcement_created', + payload => $announcement->format(), + }); + } + $post->add_to_history({ user_id => $c->user->{id}, datetime => $post->changed // $post->datetime, diff --git a/lib/CF/Controller/Users.pm b/lib/CF/Controller/Users.pm index 96bb7e024a14244b2878757376381661da1bf9b0..fae7b064775519b3f69317d2eb49f01b91606a6c 100644 --- a/lib/CF/Controller/Users.pm +++ b/lib/CF/Controller/Users.pm @@ -32,7 +32,27 @@ sub ban ($c){ my $guard = $c->schema->txn_scope_guard; $user->update({ banned_until => \"now()+'8 hour'", }); - #TODO: ANN + + #TODO: do modelu + my $msg = $c->schema->resultset('Announcement')->from_template( + 5, $user->name, + ); + + my $announcement = $c->schema->resultset('Announcement')->create({ + user_id => $c->user->{id}, + type => 5, + content => $msg, + }); + + # potrebujeme kvuli datumu + $announcement = $c->schema->resultset('Announcement')->find({ + id => $announcement->id, + }); + + $pubsub->json('notify')->notify( notify => { + event => 'announcement_created', + payload => $announcement->format(), + }); $pubsub->json('notify')->notify( notify => { event => 'user_banned', diff --git a/lib/CF/Schema/Result/Post.pm b/lib/CF/Schema/Result/Post.pm index 5061d9bb694700a86ec832537347ae427018f84a..7881f698b18b969333d6e87d378763ed2e5985b8 100644 --- a/lib/CF/Schema/Result/Post.pm +++ b/lib/CF/Schema/Result/Post.pm @@ -36,7 +36,7 @@ __PACKAGE__->set_primary_key('id'); __PACKAGE__->has_one( view => 'CF::Schema::Result::Post_view', 'id'); __PACKAGE__->belongs_to( - user => 'Zircon::Schema::Result::User', + user => 'CF::Schema::Result::User', { 'foreign.id' => 'self.user_id', }, diff --git a/lib/CF/Schema/ResultSet/Announcement.pm b/lib/CF/Schema/ResultSet/Announcement.pm index 54c7b22889e5b1d048a6ec6b63221f6ca39c8157..58a45f568a11d5ee4f732627efa8cc9e82c77c75 100644 --- a/lib/CF/Schema/ResultSet/Announcement.pm +++ b/lib/CF/Schema/ResultSet/Announcement.pm @@ -2,6 +2,9 @@ package CF::Schema::ResultSet::Announcement; use strict; use warnings; +use utf8; +use feature 'signatures'; +no warnings qw{ experimental::signatures }; use base 'DBIx::Class::ResultSet'; @@ -13,4 +16,21 @@ use constant PROTECTED_FIELDS => [qw( type )]; +use constant TEMPLATE => { + 0 => 'Předsedající prohlásil návrh postupu předložený **%s** za nepřijatelný ' . + 'a dál k němu nepřihlíží // **§4 (2) JdŘ CF**', + 1 => 'Byl schválen návrh postupu, předložený **%s** ' . + 'v následujícím znění: "*%s*"', + 2 => 'Předsedající zaznamenal přijatelný návrh postupu, předložený **%s** ' . + 'v následujícím znění: "*%s*". ' . + 'O návrhu postupu se hlasuje bezodkladně // **§10 (2) JdŘ CF**', + 5 => 'Předsedající, pořádkovým opatřením, vykázal z jednání **%s** // **§2 (1) JdŘ CF**', +}; + +sub from_template ( $class, $id, @args ) { + my $template = TEMPLATE->{$id} // return ''; + + return sprintf($template, @args); +} + 1;