1 package Newslash::Web::Controller::API::Submission;
2 use Mojo::Base 'Newslash::Web::Controller';
3 #use Mojo::Base 'Mojolicious::Controller';
5 use Mojo::JSON qw(decode_json encode_json);
11 my $subid = $c->param('subid');
12 my $user = $c->stash('user');
15 $c->render(json => { err => 1, message => "not_found" });
19 my $submissions = $c->model('submissions');
20 my $submission = $submissions->select(submission_id => $subid);
21 $c->apply_seclev_filter("submissions", $submission);
24 $c->render(json => { err => 1, message => "not_found" });
28 $c->render(json => { item => $submission });
34 my $submissions = $c->app->model('submissions');
37 my $user = $c->stash('user');
40 if ($c->param('show_deleted') && $user->{is_admin}) {
46 if ($c->param('limit')
47 && $c->param('limit') =~ m/\A[0-9]+\z/
48 && $c->param('limit') < 50) {
49 $limit = $c->param('limit');
52 && $c->param('skip') =~ m/\A[0-9]+\z/) {
53 $skip = $c->param('skip');
56 $items = $submissions->select(del => $show_deleted,
57 order_by => {create_time => "DESC"},
60 $c->apply_seclev_filter("submissions", $items);
63 $message = $submissions->last_error;
64 $c->render(json => {message => $message, error => 1});
67 $c->render(json => {message => $message, items => $items});
75 my $user = $c->stash('user');
78 if (!$user->{permissions}->{submission}) {
79 $c->render(json => { err => 1, reason => "not_allowed", message => "not_allowed" });
84 my $submissions = $c->model('submissions');
85 my $util = $c->model('util');
87 my $allowed = $c->app->config->{Editor}->{allowed_tags};
88 my $data = $c->req->json;
89 my $item = $data->{item};
93 if ($item->{introtext} || $item->{intro_text}) {
94 my $text = $item->{introtext} || $item->{intro_text};
96 $params->{introtext} = $util->clean_html($allowed, $text);
97 $params->{introtext} =~ s/\s+\z//m;
99 $message = "no_content" if (!$params->{introtext} && !$item->{url});
102 $params->{title} = $util->escape_html({}, $item->{title});
103 $message = "no_title" if !$params->{title};
107 my $url = Mojo::URL->new($item->{url});
109 $params->{url} = $item->{url};
112 $message = "invalid_url";
117 if ($item->{email}) {
118 if (Email::Valid->address($item->{email})) {
119 $params->{email} = $item->{email};
122 my $url = Mojo::URL->new($item->{email});
124 $params->{email} = $item->{email};
127 $message = "invalid_email";
132 $params->{action} = $data->{action} || 'preview';
133 $params->{extra_params} = { createheaders => $c->req->headers->to_string };
136 #$params->{tid} = 49; #mainpage
137 my $tags_string = $item->{tags_string} || "";
138 my @tags = split(/\s+/, $tags_string);
139 my $topic = $c->model('topics')->get_primary_topic_from_tags(\@tags) || {};
140 $params->{tid} = $topic->{tid} || 49;
141 $params->{tags_string} = $tags_string;
145 $c->render(json => { err => 1, message => $message });
150 if ($params->{action} eq 'preview') {
152 title => $params->{title},
153 introtext => $params->{introtext},
154 email => $params->{email},
156 url => $params->{url},
157 tid => $params->{tid},
159 $c->render(json => {item => $result});
161 elsif ($params->{action} eq 'post') {
162 my $sub_id = $submissions->create(user => $user, %$params);
164 $c->render(json => {type => "submission", id => $sub_id});
165 $c->event_que->emit("submission", "post", $user->{uid}, $sub_id);
168 #if ($submissions->last_errorno && $submissions->last_errorno == 1062) { #ER_DUP_ENTRY
169 if (defined $sub_id) {
170 $c->render(json => { err => 1, reason => "duplicated_post", message => "duplicated_post" });
174 $c->render(json => { err => 1, reason => "server_error", message => $submissions->last_error });