Expose core as member of JsonPage
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / ajax / EditAlbumAjaxPage.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.text.TextFilter
4 import net.pterodactylus.sone.utils.headers
5 import net.pterodactylus.sone.utils.ifTrue
6 import net.pterodactylus.sone.utils.parameters
7 import net.pterodactylus.sone.web.WebInterface
8 import net.pterodactylus.sone.web.page.FreenetRequest
9
10 /**
11  * Page that stores a user’s album modifications.
12  */
13 class EditAlbumAjaxPage(webInterface: WebInterface) : JsonPage("editAlbum.ajax", webInterface) {
14
15         override fun createJsonObject(request: FreenetRequest) =
16                         request.parameters["album"]!!
17                                         .let(core::getAlbum)
18                                         ?.let { album ->
19                                                 album.sone.isLocal.ifTrue {
20                                                         when {
21                                                                 request.parameters["moveLeft"] == "true" -> createSuccessJsonObject().apply {
22                                                                         put("sourceAlbumId", album.id)
23                                                                         put("destinationAlbumId", album.parent.moveAlbumUp(album).id)
24                                                                 }
25                                                                 request.parameters["moveRight"] == "true" -> createSuccessJsonObject().apply {
26                                                                         put("sourceAlbumId", album.id)
27                                                                         put("destinationAlbumId", album.parent.moveAlbumDown(album).id)
28                                                                 }
29                                                                 else -> try {
30                                                                         album.modify()
31                                                                                         .setTitle(request.parameters["title"])
32                                                                                         .setDescription(TextFilter.filter(request.headers["Host"], request.parameters["description"]))
33                                                                                         .update()
34                                                                         createSuccessJsonObject()
35                                                                                         .put("albumId", album.id)
36                                                                                         .put("title", album.title)
37                                                                                         .put("description", album.description)
38                                                                 } catch (e: IllegalStateException) {
39                                                                         createErrorJsonObject("invalid-album-title")
40                                                                 }
41                                                         }
42                                                 } ?: createErrorJsonObject("not-authorized")
43                                         } ?: createErrorJsonObject("invalid-album-id")
44
45 }