--- /dev/null
+package Newslash::Web::Controller::API::Journal;
+use Mojo::Base 'Mojolicious::Controller';
+use Mojo::Util qw(dumper);
+use Mojo::JSON qw(decode_json encode_json);
+
+sub post {
+ my $c = shift;
+ my $params = {};
+ my $extra_params = {};
+ my $opts = {};
+
+ my $user = $c->stash('user');
+
+ my $journals = $c->model('journals');
+ my $users = $c->model('users');
+ my $util = $c->model('util');
+
+ my $allowed_tags = <<'EOT';
+{
+ "a": ["href"],
+ "blockquote": [],
+ "i": [],
+ "strong": []
+}
+EOT
+
+ my $allowed = decode_json($allowed_tags);
+ my $data = $c->req->json;
+ my $message = "";
+
+ $params->{title} = $util->escape_html({}, $data->{title});
+ $message = "no title!" if !$params->{title};
+
+ $params->{time} = $data->{createtime};
+
+ # check author is valid
+ my $author = $users->select(nickname => $data->{author});
+ if (!defined $author || !$author->{admin}) {
+ $message = "invalid author";
+ }
+ $params->{uid} = $author->{uid};
+
+ $params->{dept} = $data->{dept};
+ $params->{introtext} = $util->clean_html($allowed, $data->{introtext});
+ $params->{bodytext} = $util->clean_html($allowed, $data->{bodytext});
+ #$data->{add_related};
+ #$data->{mediaurl};
+ #$data->{mediatype};
+ $params->{commentstatus} = $data->{commentstatus};
+ $params->{neverdisplay} = $data->{display} ? 0 : 1;
+
+ $params->{action} = $data->{action} || 'preview';
+
+ # TODO: can select topics
+ $params->{topics_chosen} = { 49 => 10, }; # tid => weight
+
+ #$extra_params->{createheaders} = $c->req->headers->to_string;
+
+ if (length($message) > 0) {
+ $c->render(json => { err => 1, message => $message });
+ $c->rendered(400);
+ return;
+ }
+
+ if ($data->{action} eq 'preview') {
+ $data->{introtext} = $params->{introtext};
+ $data->{title} = $params->{title};
+ $c->render(json => $data);
+ return;
+ }
+ elsif ($params->{action} eq 'post') {
+ # my $sid = $stories->create($params, $user, $extra_params, $opts);
+ # if ($sid) {
+ # $c->render(json => {type => "story", id => $sid});
+ # }
+ # else {
+ # if ($stories->last_errorno && $stories->last_errorno == 1062) { #ER_DUP_ENTRY
+ # $c->rendered(409);
+ # return;
+ # }
+ # $c->render(json => { err => 1, message => $stories->last_error });
+ # $c->rendered(500);
+ # }
+ }
+}
+
+1;
--- /dev/null
+[% WRAPPER common/layout sidebar=1 vue=1%]
+<div class="main-column">
+ <div class="post submission main-contents">
+ <div id="post-editor">
+ <h2>日記の編集</h2>
+ <div id="post-preview">
+ <div v-html="message" class="message"></div>
+ <h3>プレビュー:</h3>
+ [%-
+ story.title = "";
+ story.content_type = "journal";
+ story.author = user.nickname;
+ story.time = "";
+ story.introtext = "";
+ story.preview = 1;
+ story.commentcount = 0;
+ -%]
+ [%- INCLUDE common/article hide_more_link=1 -%]
+ </div>
+
+ <form id="post-submission" v-show="show_form">
+ <p class="form-group">
+ <label for="post-title">タイトル:</label>
+ <input id="post-title" type="text" class="form-control" name="title" v-model="title" placeholder="タイトル" />
+ </p>
+ <p class="form-group">
+ <label for="post-introtext">本文:</label>
+ <textarea id="post-introtext" name="introtext" class="form-control" v-model="introtext" placeholder="本文をここに記述してください" ></textarea>
+ </p>
+ <div class="form-inline">
+ <p class="form-group">
+ <label for="post-commentstatus">コメント設定:</label>
+ <select id="post-commentstatus" class="form-control" name="commentstatus" v-model="commentstatus">
+ <option value="disabled">コメント無効</option>
+ <option value="enabled" selected="selected">コメント有効</option>
+ <option value="friends_fof_only">トモダチとそのトモダチ</option>
+ <option value="friends_only">トモダチのみ</option>
+ <option value="logged_in">ログインユーザのみ</option>
+ <option value="no_foe">テキじゃないみんな</option>
+ <option value="no_foe_eof">テキとトモダチのテキ以外</option>
+ </select>
+ </p>
+ <p class="checkbox">
+ <label>
+ <input type="checkbox" id="post-submissioncopy" name="submissioncopy" v-model="submissioncopy" value="1" />
+ 日記のコピーをタレコミとして投稿する
+ </label>
+ </p>
+ </div>
+ <p>
+ <button type="submit" class="btn btn-default" v-on:click.prevent="show_preview">投稿確認</button>
+ <button type="reset" class="btn">リセット</button>
+ </p>
+ </form>
+
+ <form id="post-submit" v-show="show_submit">
+ <p>
+ <button type="submit" class="btn btn-default" v-on:click.prevent="post_submission">投稿</button>
+ <button type="button" class="btn" v-on:click="leave_preview">戻る</button>
+ </p>
+ </form>
+
+ </div><!-- #post-form -->
+
+ </div>
+</div>
+[%- INCLUDE common/sidebar -%]
+
+<script src="/js/editor.js" ></script>
+<script>
+ $(document).ready(function () {
+ editor.run({ type: 'journal', el: '#post-editor', author: '[% user.nickname %]', });
+ });
+</script>
+
+[% END %]