From 8adfb9f289a0905832ec9a6a4280af451fc8dfac Mon Sep 17 00:00:00 2001 From: alterdekim Date: Mon, 8 Jul 2024 04:07:07 +0300 Subject: [PATCH] script requests added --- .../controller/DatabaseController.java | 14 ++++ .../javabot/controller/PanelController.java | 19 +++++ .../javabot/entities/ActionScriptRequest.java | 34 +++++++++ .../ActionScriptRequestsRepository.java | 14 ++++ .../javabot/security/SpringSecurity.java | 1 + .../javabot/service/ActionRequestService.java | 13 ++++ .../service/ActionRequestServiceImpl.java | 38 ++++++++++ src/main/resources/messages_en.properties | 4 +- src/main/resources/messages_ru.properties | 4 +- .../static/javascript/script-editor-public.js | 44 ++++++++++++ .../static/javascript/script-editor.js | 6 +- .../resources/templates/editor-public.html | 71 +++++++++++++++++++ src/main/resources/templates/panel.html | 3 + .../resources/templates/script-editor.html | 1 - 14 files changed, 260 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/alterdekim/javabot/entities/ActionScriptRequest.java create mode 100644 src/main/java/com/alterdekim/javabot/repository/ActionScriptRequestsRepository.java create mode 100644 src/main/java/com/alterdekim/javabot/service/ActionRequestService.java create mode 100644 src/main/java/com/alterdekim/javabot/service/ActionRequestServiceImpl.java create mode 100644 src/main/resources/static/javascript/script-editor-public.js create mode 100644 src/main/resources/templates/editor-public.html diff --git a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java index d281375..c099715 100644 --- a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java +++ b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java @@ -30,6 +30,7 @@ public class DatabaseController { private final DisasterService disasterService; private final SynergyService synergyService; private final ActionScriptsService actionService; + private final ActionRequestService actionRequestService; private void saveGender(Map params) { Boolean canDie = Boolean.parseBoolean(params.get("canDie")); @@ -114,6 +115,13 @@ public class DatabaseController { actionService.saveScript(new ActionScript(t1.getId(), t2.getId(), scriptBody)); } + private void saveActionRequest(Map params) { + String scriptBody = params.get("action_body_text"); + String name_text = new String(HashUtils.decodeHexString(params.get("action_name_text"))); + String desc_text = new String(HashUtils.decodeHexString(params.get("action_desc_text"))); + actionRequestService.saveScript(new ActionScriptRequest(name_text, desc_text, scriptBody)); + } + @PostMapping("/api/remove_synergy") public String remove_synergy(@RequestParam Map params) { long id = Long.parseLong(params.get("synergy_id")); @@ -188,6 +196,12 @@ public class DatabaseController { return "ok"; } + @PostMapping("/public/api/add_entry_request") + public String add_entry_request(@RequestParam Map params) { + saveActionRequest(params); + return "ok"; + } + @PostMapping("/api/remove_entry") public String remove_entry(@RequestParam Map params) { String section = params.get("section"); diff --git a/src/main/java/com/alterdekim/javabot/controller/PanelController.java b/src/main/java/com/alterdekim/javabot/controller/PanelController.java index a317231..c38659b 100644 --- a/src/main/java/com/alterdekim/javabot/controller/PanelController.java +++ b/src/main/java/com/alterdekim/javabot/controller/PanelController.java @@ -29,6 +29,7 @@ public class PanelController { private final TextDataValService textDataValService; private final DisasterService disasterService; private final ActionScriptsServiceImpl scriptsService; + private final ActionRequestServiceImpl actionRequestService; private List dissToCards() { List bios = disasterService.getAllDisasters(); @@ -135,6 +136,21 @@ public class PanelController { return cards; } + private List requestsToCards() { + List scriptRequests = actionRequestService.getAllActionScripts(); + List cards = new ArrayList<>(); + for( ActionScriptRequest b : scriptRequests ) { + Card card = new Card(); + card.setId(b.getId()); + card.setTitle(b.getTextName()); + card.setBody(new ArrayList<>(Arrays.asList(b.getScriptBody().split("\n")))); + cards.add(card); + } + cards.sort(Comparator.comparing(Card::getId)); + Collections.reverse(cards); + return cards; + } + @GetMapping("/panel") public String panelPage(Model model, @RequestHeader("User-Agent") String uagent, @RequestHeader("Accept") String accepth, @RequestParam(value = "section", defaultValue = "diss") String section) { model.addAttribute("is_mobile", new UAgentInfo(uagent, accepth).detectSmartphone()); @@ -164,6 +180,9 @@ public class PanelController { case "actions": model.addAttribute("cards", actionsToCards() ); break; + case "script_request": + model.addAttribute("cards", requestsToCards() ); + break; } return "panel"; } diff --git a/src/main/java/com/alterdekim/javabot/entities/ActionScriptRequest.java b/src/main/java/com/alterdekim/javabot/entities/ActionScriptRequest.java new file mode 100644 index 0000000..25d5182 --- /dev/null +++ b/src/main/java/com/alterdekim/javabot/entities/ActionScriptRequest.java @@ -0,0 +1,34 @@ +package com.alterdekim.javabot.entities; + + +import jakarta.persistence.*; +import lombok.*; + +@ToString +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "action_scripts_req") +public class ActionScriptRequest { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String textName; + + @Column(nullable = false) + private String textDesc; + + @Column(nullable = false) + private String scriptBody; + + public ActionScriptRequest(String textName, String textDesc, String scriptBody) { + this.textName = textName; + this.textDesc = textDesc; + this.scriptBody = scriptBody; + } +} diff --git a/src/main/java/com/alterdekim/javabot/repository/ActionScriptRequestsRepository.java b/src/main/java/com/alterdekim/javabot/repository/ActionScriptRequestsRepository.java new file mode 100644 index 0000000..3e60a28 --- /dev/null +++ b/src/main/java/com/alterdekim/javabot/repository/ActionScriptRequestsRepository.java @@ -0,0 +1,14 @@ +package com.alterdekim.javabot.repository; + +import com.alterdekim.javabot.entities.ActionScript; +import com.alterdekim.javabot.entities.ActionScriptRequest; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface ActionScriptRequestsRepository extends JpaRepository { + Optional findById(Long id); + + List findAll(); +} diff --git a/src/main/java/com/alterdekim/javabot/security/SpringSecurity.java b/src/main/java/com/alterdekim/javabot/security/SpringSecurity.java index 1bcf7bd..475cbde 100644 --- a/src/main/java/com/alterdekim/javabot/security/SpringSecurity.java +++ b/src/main/java/com/alterdekim/javabot/security/SpringSecurity.java @@ -31,6 +31,7 @@ public class SpringSecurity { authorize .requestMatchers("/panel").hasAnyAuthority("ROLE_ADMIN") .requestMatchers("/api/**").hasAnyAuthority("ROLE_ADMIN") + .requestMatchers("/public/**").permitAll() .requestMatchers("/static/**").permitAll() .requestMatchers("/access-denied").permitAll() .requestMatchers("/signup").permitAll() diff --git a/src/main/java/com/alterdekim/javabot/service/ActionRequestService.java b/src/main/java/com/alterdekim/javabot/service/ActionRequestService.java new file mode 100644 index 0000000..b079fea --- /dev/null +++ b/src/main/java/com/alterdekim/javabot/service/ActionRequestService.java @@ -0,0 +1,13 @@ +package com.alterdekim.javabot.service; + +import com.alterdekim.javabot.entities.ActionScript; +import com.alterdekim.javabot.entities.ActionScriptRequest; + +import java.util.List; + +public interface ActionRequestService { + List getAllActionScripts(); + ActionScriptRequest getActionScriptById(long scriptId); + void removeById(long scriptId); + void saveScript(ActionScriptRequest script); +} diff --git a/src/main/java/com/alterdekim/javabot/service/ActionRequestServiceImpl.java b/src/main/java/com/alterdekim/javabot/service/ActionRequestServiceImpl.java new file mode 100644 index 0000000..963a598 --- /dev/null +++ b/src/main/java/com/alterdekim/javabot/service/ActionRequestServiceImpl.java @@ -0,0 +1,38 @@ +package com.alterdekim.javabot.service; + +import com.alterdekim.javabot.entities.ActionScript; +import com.alterdekim.javabot.entities.ActionScriptRequest; +import com.alterdekim.javabot.repository.ActionScriptRequestsRepository; +import com.alterdekim.javabot.repository.ActionScriptsRepository; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@AllArgsConstructor +public class ActionRequestServiceImpl implements ActionRequestService { + + private final ActionScriptRequestsRepository actionScriptsRepository; + + @Override + public List getAllActionScripts() { + return actionScriptsRepository.findAll(); + } + + @Override + public ActionScriptRequest getActionScriptById(long scriptId) { + return actionScriptsRepository.findById(scriptId).orElse(null); + } + + @Override + public void removeById(long scriptId) { + actionScriptsRepository.deleteById(scriptId); + } + + @Override + public void saveScript(ActionScriptRequest script) { + actionScriptsRepository.save(script); + } +} + diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index fc55838..4c01a2f 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -66,4 +66,6 @@ gllugglist=Luggages list glworklist=Works list scrieditti=Script editor scrieditde=Below you can write a script for Bunker's action card. On the left side you will find code snippets, that will help with it. Happy coding! -edditaddbtn=Edit/Add \ No newline at end of file +edditaddbtn=Edit/Add +edditreq=Send request +scrireqq=Script requests \ No newline at end of file diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties index 9c03546..a8b34ef 100644 --- a/src/main/resources/messages_ru.properties +++ b/src/main/resources/messages_ru.properties @@ -66,4 +66,6 @@ gllugglist=Список багажей glworklist=Список профессий scrieditti=Редактор скриптов (карточек действий) scrieditde=Ниже в вашем распоряжении редактор скриптов для карт действий игры Бункер. Слева вы найдете готовые куски кода, которые вам помогут. Удачи! -edditaddbtn=Изменить/Добавить \ No newline at end of file +edditaddbtn=Изменить/Добавить +edditreq=Отправить запрос +scrireqq=Запросы на скрипты \ No newline at end of file diff --git a/src/main/resources/static/javascript/script-editor-public.js b/src/main/resources/static/javascript/script-editor-public.js new file mode 100644 index 0000000..113dd6b --- /dev/null +++ b/src/main/resources/static/javascript/script-editor-public.js @@ -0,0 +1,44 @@ +var editor = ace.edit("script_editor"); +editor.setTheme("ace/theme/github"); +editor.session.setMode("ace/mode/lua"); + +// set script body +// editor.setValue(jobj.scriptBody); + +const snippets = ["player", "players[index]", "genders[index]", "hobbies[index]", "healths[index]", "luggages[index]", "works[index]"]; + +function str_toHex(s) { + // utf8 to latin1 + var s = unescape(encodeURIComponent(s)); + var h = ''; + for (var i = 0; i < s.length; i++) { + h += s.charCodeAt(i).toString(16); + } + return h; +} + +function pasteSnippet(index) { + editor.insert(snippets[index]); +} + +function grab_form() { + let arr = {}; + arr["action_body_text"] = editor.getValue(); + arr["action_desc_text"] = str_toHex($("#action_desc_text").val()); + arr["action_name_text"] = str_toHex($("#action_name_text").val()); + return arr; +} + +function add_entry() { + $.ajax({ + url: "/public/api/add_entry_request", + type: "POST", + data: grab_form() + }).done(function() { + window.location.reload(); // make popup confirm + }); +} + +function edit_submit_entry() { + add_entry(); +} \ No newline at end of file diff --git a/src/main/resources/static/javascript/script-editor.js b/src/main/resources/static/javascript/script-editor.js index 270af55..97af21a 100644 --- a/src/main/resources/static/javascript/script-editor.js +++ b/src/main/resources/static/javascript/script-editor.js @@ -51,10 +51,10 @@ function getActionScript() { $( document ).ready(function() { if ($.urlParam("script_id") != "-1") { getActionScript(); - $(".dropdown-item").each(function() { - $(this).attr("href", $(this).attr("href")+"&script_id="+($.urlParam("script_id"))); - }); } + $(".dropdown-item").each(function() { + $(this).attr("href", $(this).attr("href")+"&script_id="+($.urlParam("script_id"))); + }); }); function grab_form() { diff --git a/src/main/resources/templates/editor-public.html b/src/main/resources/templates/editor-public.html new file mode 100644 index 0000000..ad4e53d --- /dev/null +++ b/src/main/resources/templates/editor-public.html @@ -0,0 +1,71 @@ + + + + + + + + +
+
+
+
+

+

+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+
+ + +
+ +
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/panel.html b/src/main/resources/templates/panel.html index 734b442..3c0476f 100644 --- a/src/main/resources/templates/panel.html +++ b/src/main/resources/templates/panel.html @@ -44,6 +44,9 @@ +