b0ce04825e5c750c6de751f0a254edbbd8ee9bd8
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / ajax / EditImageAjaxPage.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.template.ParserFilter
4 import net.pterodactylus.sone.template.RenderFilter
5 import net.pterodactylus.sone.template.ShortenFilter
6 import net.pterodactylus.sone.text.TextFilter
7 import net.pterodactylus.sone.utils.headers
8 import net.pterodactylus.sone.utils.ifTrue
9 import net.pterodactylus.sone.utils.parameters
10 import net.pterodactylus.sone.web.WebInterface
11 import net.pterodactylus.sone.web.page.FreenetRequest
12 import net.pterodactylus.util.template.TemplateContext
13 import javax.inject.Inject
14
15 /**
16  * Page that stores a user’s image modifications.
17  */
18 class EditImageAjaxPage @Inject constructor(webInterface: WebInterface,
19                 private val parserFilter: ParserFilter,
20                 private val shortenFilter: ShortenFilter,
21                 private val renderFilter: RenderFilter) : JsonPage("editImage.ajax", webInterface) {
22
23         override fun createJsonObject(request: FreenetRequest) =
24                         request.parameters["image"]
25                                         .let(core::getImage)
26                                         ?.let { image ->
27                                                 image.sone.isLocal.ifTrue {
28                                                         when {
29                                                                 request.parameters["moveLeft"] == "true" -> createSuccessJsonObject().apply {
30                                                                         put("sourceImageId", image.id)
31                                                                         put("destinationImageId", image.album.moveImageUp(image).id)
32                                                                         core.touchConfiguration()
33                                                                 }
34                                                                 request.parameters["moveRight"] == "true" -> createSuccessJsonObject().apply {
35                                                                         put("sourceImageId", image.id)
36                                                                         put("destinationImageId", image.album.moveImageDown(image).id)
37                                                                         core.touchConfiguration()
38                                                                 }
39                                                                 else -> request.parameters["title"]!!.let { title ->
40                                                                         title.trim().isNotBlank().ifTrue {
41                                                                                 request.parameters["description"]!!.let { description ->
42                                                                                         image.modify()
43                                                                                                         .setTitle(title)
44                                                                                                         .setDescription(TextFilter.filter(request.headers["Host"], description))
45                                                                                                         .update().let { newImage ->
46                                                                                                 createSuccessJsonObject().apply {
47                                                                                                         put("title", newImage.title)
48                                                                                                         put("description", newImage.description)
49                                                                                                         put("parsedDescription", newImage.description.let {
50                                                                                                                 parserFilter.format(TemplateContext(), it, mutableMapOf("sone" to image.sone)).let {
51                                                                                                                         shortenFilter.format(TemplateContext(), it, mutableMapOf()).let {
52                                                                                                                                 renderFilter.format(TemplateContext(), it, mutableMapOf()) as String
53                                                                                                                         }
54                                                                                                                 }
55                                                                                                         })
56                                                                                                         core.touchConfiguration()
57                                                                                                 }
58                                                                                         }
59                                                                                 }
60                                                                         } ?: createErrorJsonObject("invalid-image-title")
61                                                                 }
62                                                         }
63                                                 } ?: createErrorJsonObject("not-authorized")
64                                         } ?: createErrorJsonObject("invalid-image-id")
65
66 }