OSDN Git Service

Contoroller::API::Submission: fix to work
[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 post {
7     my $c = shift;
8     my $params = {};
9     my $extra_params = {};
10     my $opts = {};
11
12     my $user = $c->stash('user');
13     my $submissions = $c->model('submissions');
14     my $util = $c->model('util');
15
16     my $allowed = $c->app->config->{Editor}->{allowed_tags};
17     my $data = $c->req->json;
18     my $item = $data->{item};
19
20     $params->{title} = $util->escape_html({}, $item->{title});
21     $params->{url} = $item->{url};
22     $params->{email} = $item->{email};
23     $params->{introtext} = $util->clean_html($allowed, $item->{introtext});
24     $params->{tid} = 49; #mainpage
25     $params->{action} = $data->{action} || 'preview';
26     $extra_params->{createheaders} = $c->req->headers->to_string;
27
28     if ($params->{action} eq 'preview') {
29         my $result = {
30                       title => $params->{title},
31                       introtext => $params->{introtext},
32                       email => $params->{email},
33                       tid => $params->{tid},
34                      };
35         $c->render(json => {item => $result});
36     }
37     elsif ($params->{action} eq 'post') {
38         my $sub_id = $submissions->create($params, $user, $extra_params, $opts);
39         if ($sub_id) {
40             $c->render(json => {type => "submission", id => $sub_id});
41         }
42         else {
43             if ($submissions->last_errorno && $submissions->last_errorno == 1062) { #ER_DUP_ENTRY
44                 $c->rendered(409);
45                 return;
46             }
47             $c->render(json => { err => 1, message => $submissions->last_error });
48             $c->rendered(500);
49             $c->rendered(500);
50         }
51     }
52 }
53
54 1;