aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-www/src/main/java/com/juick/www/controllers/NewMessage.java')
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/NewMessage.java189
1 files changed, 47 insertions, 142 deletions
diff --git a/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java b/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
index ec1b6310..79102f18 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
@@ -18,23 +18,16 @@ package com.juick.www.controllers;
import com.juick.Status;
import com.juick.Tag;
-import com.juick.server.helpers.TagStats;
-import com.juick.server.util.HttpBadRequestException;
-import com.juick.server.util.HttpForbiddenException;
-import com.juick.server.util.HttpNotFoundException;
-import com.juick.server.util.HttpUtils;
-import com.juick.server.util.ImageUtils;
+import com.juick.server.util.*;
import com.juick.service.*;
-import com.juick.server.util.UserUtils;
-import com.juick.www.Utils;
import com.juick.www.WebApp;
-import org.apache.commons.codec.CharEncoding;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -46,16 +39,12 @@ import rocks.xmpp.extensions.nick.model.Nickname;
import rocks.xmpp.extensions.oob.model.x.OobX;
import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.net.URLEncoder;
import java.util.List;
+import java.util.stream.Collectors;
/**
* @author Ugnich Anton
@@ -77,119 +66,48 @@ public class NewMessage {
CrosspostService crosspostService;
@Inject
WebApp webApp;
- @Inject
- PageTemplates templates;
private static final Logger logger = LoggerFactory.getLogger(NewMessage.class);
@GetMapping("/post")
- protected void doGetNewMessage(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ protected String postAction(@RequestParam(required = false) String body, ModelMap model) throws IOException {
com.juick.User visitor = UserUtils.getCurrentUser();
- if (visitor.getUid() == 0) {
- Utils.sendTemporaryRedirect(response, "/login");
- return;
- }
- response.setContentType("text/html; charset=UTF-8");
- try (PrintWriter out = response.getWriter()) {
- templates.pageHead(out, visitor, "Написать", "<script src=\"//maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAVVtPtxkw4soCEHg44FsNChRB4OFYjAXt73He16Zkp6a_0tPs2RTU6i6UlcMs4QvPBYvIY8rWvcxqOg\" type=\"text/javascript\"></script>"
+ model.addAttribute("title", "Написать");
+ model.addAttribute("headers", "<script src=\"//maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAVVtPtxkw4soCEHg44FsNChRB4OFYjAXt73He16Zkp6a_0tPs2RTU6i6UlcMs4QvPBYvIY8rWvcxqOg\" type=\"text/javascript\"></script>"
+ "<script src=\"//static.juick.com/mc.js\" type=\"text/javascript\" defer=\"defer\"></script>"
+ "<script src=\"//static.juick.com/maps.js?2010111500\" type=\"text/javascript\" defer=\"defer\"></script>"
+ "<script src=\"//static.juick.com/post3.js\" type=\"text/javascript\" defer=\"defer\"></script>");
- templates.pageNavigation(out, visitor, null);
-
- out.println("<section id=\"content\" class=\"pagetext\">");
-
- out.println("<form action=\"/post2\" method=\"post\" id=\"postmsg\" enctype=\"multipart/form-data\">");
- out.println("<p style=\"text-align: left\"><b>Место: <span id=\"location\"></span></b> <span id=\"locationclear\">&mdash; <a href=\"#\" onclick=\"clearLocation()\">Отменить</a></span></p>");
- out.println("<p style=\"text-align: left\"><b>Фото:</b> <span id=\"attachmentfile\"><input type=\"file\" name=\"attach\"/> <i>(JPG, PNG, до 10Мб)</i></span></p>");
-
- String body = request.getParameter("body");
- if (body == null) {
- body = StringUtils.EMPTY;
- } else {
- if (body.length() > 4096) {
- body = body.substring(0, 4096);
- }
- body = StringEscapeUtils.escapeHtml4(body);
- }
- out.println("<p><textarea name=\"body\" class=\"newmessage\" rows=\"7\" cols=\"10\">" + body + "</textarea><br/>");
-
- out.println("<input type=\"hidden\" name=\"place_id\"/>" + "" + "<input type=\"submit\" class=\"subm\" value=\" Отправить \"/></p>");
- out.println("</form>");
- out.println("<div id=\"geomap\"></div>");
- out.println("<p style=\"text-align: left\"><b>Теги:</b></p>");
- printUserTags(out, visitor);
- out.println("</section>");
-
- templates.pageFooter(request, out, visitor, false);
- templates.pageEnd(out);
- }
- }
-
- void printUserTags(PrintWriter out, com.juick.User visitor) {
- List<TagStats> tags = tagService.getUserTagStats(visitor.getUid());
-
- if (tags.isEmpty()) {
- return;
- }
-
- int min = tags.get(0).getUsageCount();
- int max = tags.get(0).getUsageCount();
- for (int i = 1; i < tags.size(); i++) {
- int usagecnt = tags.get(i).getUsageCount();
- if (usagecnt < min) {
- min = usagecnt;
- }
- if (usagecnt > max) {
- max = usagecnt;
- }
- }
- max -= min;
-
- out.print("<p style=\"text-align: justify\">");
- for (int i = 0; i < tags.size(); i++) {
- if (i > 0) {
- out.print(" ");
- }
- String taglink = StringUtils.EMPTY;
- try {
- taglink = "<a onclick=\"return addTag('" + StringEscapeUtils.escapeHtml4(tags.get(i).getTag().getName()) + "')\" href=\"/" +
- visitor.getName() + "/?tag=" + URLEncoder.encode(tags.get(i).getTag().getName(), CharEncoding.UTF_8) +
- "\" title=\"" + tags.get(i).getUsageCount() + "\">" + StringEscapeUtils.escapeHtml4(tags.get(i).getTag().getName()) + "</a>";
- } catch (UnsupportedEncodingException e) {
- }
- int usagecnt = tags.get(i).getUsageCount();
- if (usagecnt <= max / 5 + min) {
- out.print("<span style=\"font-size: small\">" + taglink + "</span>");
- } else if (usagecnt <= max / 5 * 2 + min) {
- out.print(taglink);
- } else if (usagecnt <= max / 5 * 3 + min) {
- out.print("<span style=\"font-size: large\">" + taglink + "</span>");
- } else if (usagecnt <= max / 5 * 4 + min) {
- out.print("<span style=\"font-size: x-large\">" + taglink + "</span>");
- } else {
- out.print("<span style=\"font-size: xx-large\">" + taglink + "</span>");
+ model.addAttribute("visitor", visitor);
+ if (body == null) {
+ body = StringUtils.EMPTY;
+ } else {
+ if (body.length() > 4096) {
+ body = body.substring(0, 4096);
}
+ body = StringEscapeUtils.escapeHtml4(body);
}
- out.println("</p>");
+ model.addAttribute("body", body);
+ model.addAttribute("visitor", visitor);
+ model.addAttribute("tags", tagService.getUserTagStats(visitor.getUid()).stream()
+ .sorted((e1, e2) -> Integer.compare(e2.getUsageCount(), e1.getUsageCount())).map(t -> t.getTag().getName()).collect(Collectors.toList()));
+ return "views/post";
}
@PostMapping("/post")
- public void doPostMessage(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false) String img,
+ public String postResult(@RequestParam(required = false) String img,
@RequestParam String body,
- @RequestParam(required = false) MultipartFile attach) throws IOException {
+ @RequestParam(required = false, name = "tags") String tagsStr,
+ @RequestParam(required = false) MultipartFile attach, ModelMap model) throws IOException {
com.juick.User visitor = UserUtils.getCurrentUser();
if (visitor.getUid() == 0) {
- response.sendError(HttpServletResponse.SC_FORBIDDEN);
- return;
+ throw new HttpForbiddenException();
}
if (body == null || body.length() < 1 || body.length() > 4096) {
- response.sendError(HttpServletResponse.SC_BAD_REQUEST);
- return;
+ throw new HttpBadRequestException();
}
body = body.replace("\r", StringUtils.EMPTY);
- List<Tag> tags = webApp.parseTags(request.getParameter("tags"));
+ List<Tag> tags = webApp.parseTags(tagsStr);
String attachmentFName = HttpUtils.receiveMultiPartFile(attach, webApp.getTmpDir());
@@ -249,50 +167,37 @@ public class NewMessage {
//
- response.setContentType("text/html; charset=UTF-8");
- try (PrintWriter out = response.getWriter()) {
- templates.pageHead(out, visitor, "Сообщение опубликовано", null);
- templates.pageNavigation(out, visitor, null);
-
- String hashtags = StringUtils.EMPTY;
- String tagscomma = StringUtils.EMPTY;
- for (int i = 0; i < jmsg.getTags().size(); i++) {
- if (i > 0) {
- hashtags += " ";
- tagscomma += ",";
- }
- hashtags += "#" + jmsg.getTags().get(i);
- tagscomma += jmsg.getTags().get(i);
+ model.addAttribute("title", "Сообщение опубликовано");
+ model.addAttribute("visitor", visitor);
+ model.addAttribute("user", visitor);
+
+ String hashtags = StringUtils.EMPTY;
+ String tagscomma = StringUtils.EMPTY;
+ for (int i = 0; i < jmsg.getTags().size(); i++) {
+ if (i > 0) {
+ hashtags += " ";
+ tagscomma += ",";
}
+ hashtags += "#" + jmsg.getTags().get(i);
+ tagscomma += jmsg.getTags().get(i);
+ }
+
+ model.addAttribute("url", "http://juick.com/" + mid);
- String url = URLEncoder.encode("http://juick.com/" + mid, CharEncoding.UTF_8);
+ if (crosspostService.getTwitterTokens(visitor.getUid()).isPresent()) {
String sharetwi = hashtags + " " + body;
if (sharetwi.length() > 115) {
sharetwi = sharetwi.substring(0, 114) + "…";
}
sharetwi += " http://juick.com/" + mid;
- String sharelj = URLEncoder.encode(body + "\n", CharEncoding.UTF_8) + url;
-
- out.println("<section id=\"content\">");
- out.println("<h1>Сообщение опубликовано</h1>");
- out.println("<p>Поделитесь своим новым постом в социальных сетях:</p>");
- if (crosspostService.getTwitterTokens(visitor.getUid()).isPresent()) {
- out.println("<p class=\"social\"><a href=\"https://twitter.com/intent/tweet?text=" + URLEncoder.encode(sharetwi, CharEncoding.UTF_8) + "\" class=\"ico32-twi sharenew\">Отправить в Twitter</a></p>");
- }
- out.println("<p class=\"social\"><a href=\"http://www.livejournal.com/update.bml?subject=" + URLEncoder.encode(hashtags, CharEncoding.UTF_8) + "&event=" + sharelj + "&prop_taglist=" + URLEncoder.encode(tagscomma, CharEncoding.UTF_8) + "\" target=\"_blank\" class=\"ico32-lj sharenew\">Отправить в LiveJournal</a></p>");
- out.println("<p class=\"social\"><a href=\"https://vk.com/share.php?url=" + url + "\" class=\"ico32-vk sharenew\">Отправить в ВКонтакте</a></p>");
- if (crosspostService.getFacebookToken(visitor.getUid()).isPresent()) {
- out.println("<p class=\"social\"><a href=\"https://www.facebook.com/sharer/sharer.php?u=" + url + "\" class=\"ico32-fb sharenew\">Отправить в Facebook</a></p>");
- }
- out.println("<p class=\"social\"><a href=\"https://plus.google.com/share?url=" + url + "\" class=\"ico32-gp sharenew\">Отправить в Google+</a></p>");
- out.println("<p>Ссылка на сообщение: <a href=\"http://juick.com/" + mid + "\">http://juick.com/" + mid + "</a></p>");
- out.println("</section>");
-
- templates.pageHomeColumn(out, visitor);
-
- templates.pageFooter(request, out, visitor, false);
- templates.pageEnd(out);
+ model.addAttribute("sharetwi", sharetwi);
+ }
+ if (crosspostService.getFacebookToken(visitor.getUid()).isPresent()) {
+ model.addAttribute("facebook", 1);
}
+ model.addAttribute("tags", tagService.getUserTagStats(visitor.getUid()).stream()
+ .sorted((e1, e2) -> Integer.compare(e2.getUsageCount(), e1.getUsageCount())).map(t -> t.getTag().getName()).collect(Collectors.toList()));
+ return "views/post_success";
}
@PostMapping("/comment")