OSDN Git Service

* Web::Controller::API::Submission: fix error messages
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Web / Controller / API / Submission.pm
1 package Newslash::Web::Controller::API::Submission;
2 use Mojo::Base 'Mojolicious::Controller';
3 use Mojo::Util qw(dumper);
4 use Mojo::JSON qw(decode_json encode_json);
5
6 sub get {
7     my $c = shift;
8     my $subid = $c->param('subid');
9
10     if (!$subid) {
11         $c->render(json => { err => 1, message => "not_found" });
12         $c->rendered(404);
13         return;
14     }
15     my $submissions = $c->model('submissions');
16     my $submission = $submissions->select(submission_id => $subid);
17     if (!$submission) {
18         $c->render(json => { err => 1, message => "not_found" });
19         $c->rendered(404);
20         return;
21     }
22     $c->render(json => { item => $submission });
23     return;
24 }
25
26 sub post {
27     my $c = shift;
28     my $params = {};
29     my $extra_params = {};
30     my $opts = {};
31
32     my $user = $c->stash('user');
33
34     # check permission
35     if (!$user->{permissions}->{submission}) {
36         $c->render(json => { err => 1, reason => "not_allowed", message => "not_allowed" });
37         $c->rendered(403);
38         return;
39     }
40
41     my $submissions = $c->model('submissions');
42     my $util = $c->model('util');
43
44
45     my $allowed = $c->app->config->{Editor}->{allowed_tags};
46     my $data = $c->req->json;
47     my $item = $data->{item};
48
49     $params->{title} = $util->escape_html({}, $item->{title});
50     $params->{url} = $item->{url};
51     $params->{email} = $item->{email};
52     $params->{introtext} = $util->clean_html($allowed, $item->{introtext});
53     $params->{tid} = 49; #mainpage
54     $params->{action} = $data->{action} || 'preview';
55     $extra_params->{createheaders} = $c->req->headers->to_string;
56
57     if ($params->{action} eq 'preview') {
58         my $result = {
59                       title => $params->{title},
60                       introtext => $params->{introtext},
61                       email => $params->{email},
62                       tid => $params->{tid},
63                      };
64         $c->render(json => {item => $result});
65     }
66     elsif ($params->{action} eq 'post') {
67         my $sub_id = $submissions->create($params, $user, $extra_params, $opts);
68         if ($sub_id) {
69             $c->render(json => {type => "submission", id => $sub_id});
70             $c->event_que->emit("submission", "post", $user->{uid}, $sub_id);
71         }
72         else {
73             #if ($submissions->last_errorno && $submissions->last_errorno == 1062) { #ER_DUP_ENTRY
74             if (defined $sub_id) {
75                 $c->render(json => { err => 1, reason => "duplicated_post", message => "duplicated_post" });
76                 $c->rendered(409);
77                 return;
78             }
79             $c->render(json => { err => 1, reason => "server_error", message => $submissions->last_error });
80             $c->rendered(500);
81         }
82     }
83 }
84
85 1;