1 package Newslash::Web::Controller::API::Journal;
2 use Mojo::Base 'Mojolicious::Controller';
3 use Mojo::Util qw(dumper);
4 use Mojo::JSON qw(decode_json encode_json);
12 my $user = $c->stash('user');
14 my $journals = $c->model('journals');
15 my $users = $c->model('users');
16 my $util = $c->model('util');
18 my $allowed_tags = <<'EOT';
26 #my $allowed = decode_json($allowed_tags);
42 'blockquote' => ['title', 'cite',],
53 my $data = $c->req->json;
56 $params->{description} = $util->escape_html({}, $data->{title});
57 $message = "no title!" if !$params->{title};
59 # check author is valid
60 my $author = $users->select(nickname => $data->{author});
61 if (!defined $author || !$author->{login}) {
62 $message = "invalid author";
64 $params->{uid} = $author->{uid};
65 $params->{article} = $data->{journal};
66 $params->{commentstatus} = $data->{comment_status};
67 $params->{action} = $data->{action} || 'preview';
68 $params->{posttype} = $data->{post_type};
69 $params->{tid} = $data->{tid};
70 $params->{promotype} = $data->{promotype};
72 # TODO: can select topics
73 #$params->{topics_chosen} = { 49 => 10, }; # tid => weight
75 #$extra_params->{createheaders} = $c->req->headers->to_string;
77 if (length($message) > 0) {
79 $c->render(json => { err => 1, message => $message });
84 if ($data->{action} eq 'preview') {
85 $data->{journal} = $util->clean_html($allowed, $params->{article});
86 $data->{title} = $params->{description};
87 $c->render(json => $data);
90 elsif ($params->{action} eq 'post') {
91 my $journal_id = $journals->create($params, $user, $extra_params, $opts);
93 $c->render(json => {type => "journal", id => $journal_id});
96 if ($journals->last_errorno && $journals->last_errorno == 1062) { #ER_DUP_ENTRY
100 $c->render(json => { err => 1, message => $journals->last_error });