Skip to content

Commit

Permalink
code cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcom committed Oct 30, 2024
1 parent 0fdd168 commit 211183b
Show file tree
Hide file tree
Showing 11 changed files with 55 additions and 58 deletions.
10 changes: 6 additions & 4 deletions src/main/java/ru/org/linux/group/GroupPermissionService.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 1998-2023 Linux.org.ru
* Copyright 1998-2024 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
Expand Down Expand Up @@ -235,7 +235,9 @@ class GroupPermissionService(sectionService: SectionService, deleteInfoDao: Dele
* @param by редактор
* @return true если можно, false если нет
*/
def isTagsEditable(topic: PreparedTopic, @Nullable by: User): Boolean = {
def isTagsEditable(topic: PreparedTopic, byOpt: Option[User]): Boolean = {
val by = byOpt.orNull

val message = topic.message
val section = topic.section
val author = topic.author
Expand Down Expand Up @@ -279,6 +281,6 @@ class GroupPermissionService(sectionService: SectionService, deleteInfoDao: Dele
}
}

def canCommit(user: User, topic: Topic): Boolean =
user!=null && (user.isModerator || (user.canCorrect && topic.authorUserId != user.getId))
def canCommit(userOpt: Option[User], topic: Topic): Boolean =
userOpt.exists(user => user.isModerator || (user.canCorrect && topic.authorUserId != user.getId))
}
10 changes: 5 additions & 5 deletions src/main/java/ru/org/linux/tag/TagPageController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.{PathVariable, RequestMapping, RequestMethod}
import org.springframework.web.servlet.ModelAndView
import org.springframework.web.servlet.view.RedirectView
import ru.org.linux.auth.AuthUtil
import ru.org.linux.auth.{AuthUtil, CurrentUser}
import ru.org.linux.gallery.ImageService
import ru.org.linux.group.GroupPermissionService
import ru.org.linux.section.{Section, SectionService}
Expand Down Expand Up @@ -94,7 +94,7 @@ class TagPageController(tagService: TagService, prepareService: TopicPrepareServ
Future.successful(new ModelAndView(new RedirectView(mainName.url.get, false, false))).toJava
}.getOrElse(throw new TagNotFoundException())
case Some(tagInfo) =>
val (news, newsDate) = getNewsSection(tag, currentUser)
val (news, newsDate) = getNewsSection(tag, currentUserObj)
val (forum, forumDate) = getTopicList(tag, tagInfo.id, Section.SECTION_FORUM, CommitMode.POSTMODERATED_ONLY, currentUser)
val gallery = getGallerySection(tag, tagInfo.id, currentUser)
val (polls, _) = getTopicList(tag, tagInfo.id, Section.SECTION_POLLS, CommitMode.COMMITED_ONLY, currentUser)
Expand Down Expand Up @@ -139,10 +139,10 @@ class TagPageController(tagService: TagService, prepareService: TopicPrepareServ
}
}

private def getNewsSection(tag: String, currentUser: Option[User]) = {
private def getNewsSection(tag: String, currentUser: Option[CurrentUser]) = {
val newsSection = sectionService.getSection(Section.SECTION_NEWS)
val newsTopics = topicListService.getTopicsFeed(newsSection, None, Some(tag), 0, None,
TagPageController.TotalNewsCount, currentUser, noTalks = false, tech = false)
TagPageController.TotalNewsCount, currentUser.map(_.user), noTalks = false, tech = false)

val (fullNewsTopics, briefNewsTopics) = if (newsTopics.headOption.map(_.commitDate.toInstant).exists(isRecent)) {
newsTopics.splitAt(1)
Expand All @@ -163,7 +163,7 @@ class TagPageController(tagService: TagService, prepareService: TopicPrepareServ

val newestDate = newsTopics.headOption.map(_.commitDate.toInstant)

val addNews = if (groupPermissionService.isTopicPostingAllowed(newsSection, currentUser)) {
val addNews = if (groupPermissionService.isTopicPostingAllowed(newsSection, currentUser.map(_.user))) {
Some("addNews" -> AddTopicController.getAddUrl(newsSection, tag))
} else {
None
Expand Down
8 changes: 1 addition & 7 deletions src/main/scala/ru/org/linux/spring/MainPageController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,7 @@ class MainPageController(prepareService: TopicPrepareService, topicListService:

val mv = new ModelAndView("index")

mv.getModel.put("news",
prepareService.prepareTopicsForUser(
messages,
currentUser.map(_.user),
profile,
loadUserpics = false)
)
mv.getModel.put("news", prepareService.prepareTopicsForUser(messages, currentUser, profile, loadUserpics = false))

val briefNewsByDate = TopicListTools.datePartition(titles)

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/ru/org/linux/topic/AddTopicController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ class AddTopicController(searchQueueSender: SearchQueueSender, captcha: CaptchaS

params.put("message", preparedTopic)

val topicMenu = prepareService.getTopicMenu(preparedTopic, sessionUserOpt.map(_.user).orNull, tmpl.getProf, loadUserpics = true)
val topicMenu = prepareService.getTopicMenu(preparedTopic, sessionUserOpt, tmpl.getProf, loadUserpics = true)
params.put("topicMenu", topicMenu)

if (!form.isPreviewMode && !errors.hasErrors) {
Expand Down
26 changes: 14 additions & 12 deletions src/main/scala/ru/org/linux/topic/EditTopicController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
val tmpl = Template.getTemplate
val topic = messageDao.getById(msgid)

if (!permissionService.canCommit(currentUser.user, topic)) {
if (!permissionService.canCommit(Some(currentUser.user), topic)) {
throw new AccessViolationException("Not authorized")
}

Expand All @@ -84,7 +84,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
}

initForm(preparedTopic, form)
val mv = new ModelAndView("edit", prepareModel(preparedTopic, currentUser.user, tmpl.getProf).asJava)
val mv = new ModelAndView("edit", prepareModel(preparedTopic, currentUser, tmpl.getProf).asJava)

mv.getModel.put("commit", true)

Expand All @@ -98,17 +98,17 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
val user = currentUser.user
val preparedTopic = prepareService.prepareTopic(message, user)

if (!permissionService.isEditable(preparedTopic, user) && !permissionService.isTagsEditable(preparedTopic, user)) {
if (!permissionService.isEditable(preparedTopic, user) && !permissionService.isTagsEditable(preparedTopic, Some(user))) {
throw new AccessViolationException("это сообщение нельзя править")
}

val tmpl = Template.getTemplate

initForm(preparedTopic, form)
new ModelAndView("edit", prepareModel(preparedTopic, user, tmpl.getProf).asJava)
new ModelAndView("edit", prepareModel(preparedTopic, currentUser, tmpl.getProf).asJava)
}

private def prepareModel(preparedTopic: PreparedTopic, currentUser: User, profile: Profile): mutable.HashMap[String, AnyRef] = {
private def prepareModel(preparedTopic: PreparedTopic, currentUser: CurrentUser, profile: Profile): mutable.HashMap[String, AnyRef] = {
val params = mutable.HashMap[String, AnyRef]()

val message = preparedTopic.message
Expand All @@ -122,7 +122,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
params.put("groups", groupDao.getGroups(preparedTopic.section))
params.put("newMsg", message)

val topicMenu = prepareService.getTopicMenu(preparedTopic, currentUser, profile, loadUserpics = true)
val topicMenu = prepareService.getTopicMenu(preparedTopic, Some(currentUser), profile, loadUserpics = true)

params.put("topicMenu", topicMenu)

Expand All @@ -139,7 +139,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe

val messageText = msgbaseDao.getMessageText(message.id)

params.put("imagepost", Boolean.box(permissionService.isImagePostingAllowed(preparedTopic.section, currentUser)))
params.put("imagepost", Boolean.box(permissionService.isImagePostingAllowed(preparedTopic.section, currentUser.user)))
params.put("mode", messageText.markup.title)

params
Expand Down Expand Up @@ -202,14 +202,14 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
val topic = messageDao.getById(msgid)
val preparedTopic = prepareService.prepareTopic(topic, currentUser.user)

val params = prepareModel(preparedTopic, currentUser.user, tmpl.getProf)
val params = prepareModel(preparedTopic, currentUser, tmpl.getProf)

val group = preparedTopic.group
val user = currentUser.user

IPBlockDao.checkBlockIP(ipBlockInfo, errors, user)

val tagsEditable = permissionService.isTagsEditable(preparedTopic, user)
val tagsEditable = permissionService.isTagsEditable(preparedTopic, Some(user))
val editable = permissionService.isEditable(preparedTopic, user)

if (!editable && !tagsEditable) {
Expand Down Expand Up @@ -242,7 +242,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
val commit = request.getParameter("commit") != null

if (commit) {
if (!permissionService.canCommit(user, topic)) {
if (!permissionService.canCommit(Some(user), topic)) {
throw new AccessViolationException("Not authorized")
}

Expand All @@ -251,7 +251,9 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
}
}

params.put("commit", Boolean.box(!topic.commited && preparedTopic.section.isPremoderated && permissionService.canCommit(user, topic)))
val canCommit = !topic.commited && preparedTopic.section.isPremoderated && permissionService.canCommit(Some(user), topic)

params.put("commit", Boolean.box(canCommit))

val newMsg = Topic.fromEditRequest(group, topic, form, publish)

Expand Down Expand Up @@ -306,7 +308,7 @@ class EditTopicController(messageDao: TopicDao, searchQueueSender: SearchQueueSe
throw new AccessViolationException("нельзя править это сообщение, только теги")
}

if (form.getMinor != null && !permissionService.canCommit(user, topic)) {
if (form.getMinor != null && !permissionService.canCommit(Some(user), topic)) {
throw new AccessViolationException("вы не можете менять статус новости")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class TagTopicListController(userTagService: UserTagService, sectionService: Sec
val topics = topicListService.getTopicsFeed(section, None, Some(tag), offset, None,
20, currentUserOpt.map(_.user), noTalks = false, tech = false)

(prepareService.prepareTopicsForUser(topics, currentUserOpt.map(_.user), prof, loadUserpics = false), 20)
(prepareService.prepareTopicsForUser(topics, currentUserOpt, prof, loadUserpics = false), 20)
}

modelAndView.addObject("messages", preparedTopics)
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/ru/org/linux/topic/TopicController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ class TopicController(sectionService: SectionService, topicDao: TopicDao, prepar
}
}

params.put("messageMenu", topicPrepareService.getTopicMenu(preparedMessage, currentUserOpt.map(_.user).orNull, tmpl.getProf, loadUserpics = true))
params.put("messageMenu", topicPrepareService.getTopicMenu(preparedMessage, currentUserOpt, tmpl.getProf, loadUserpics = true))
params.put("memoriesInfo", memoriesDao.getTopicInfo(topic.id, currentUserOpt.map(_.user)))

val ignoreList: Set[Int] = currentUserOpt.map { currentUser =>
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/ru/org/linux/topic/TopicListController.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 1998-2023 Linux.org.ru
* Copyright 1998-2024 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
Expand Down Expand Up @@ -142,7 +142,7 @@ class TopicListController(sectionService: SectionService, topicListService: Topi

modelAndView.addObject(
"messages",
prepareService.prepareTopicsForUser(messages, currentUserOpt.map(_.user), tmpl.getProf, loadUserpics = false))
prepareService.prepareTopicsForUser(messages, currentUserOpt, tmpl.getProf, loadUserpics = false))

modelAndView.addObject("offsetNavigation", topicListForm.yearMonth.isEmpty)

Expand Down
31 changes: 15 additions & 16 deletions src/main/scala/ru/org/linux/topic/TopicPrepareService.scala
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import ru.org.linux.util.StringUtil

import javax.annotation.Nullable
import scala.jdk.CollectionConverters.*
import scala.jdk.OptionConverters.{RichOption, RichOptional}
import scala.jdk.OptionConverters.RichOptional

@Service
class TopicPrepareService(sectionService: SectionService, groupDao: GroupDao, deleteInfoDao: DeleteInfoDao,
Expand Down Expand Up @@ -159,15 +159,16 @@ class TopicPrepareService(sectionService: SectionService, groupDao: GroupDao, de
* @param loadUserpics флаг загрузки аватар
* @return список подготовленных топиков
*/
def prepareTopicsForUser(messages: collection.Seq[Topic], user: Option[User], profile: Profile, loadUserpics: Boolean): java.util.List[PersonalizedPreparedTopic] = {
def prepareTopicsForUser(messages: collection.Seq[Topic], user: Option[CurrentUser], profile: Profile,
loadUserpics: Boolean): java.util.List[PersonalizedPreparedTopic] = {
val textMap = loadTexts(messages)
val tags = topicTagService.tagRefs(messages.map(_.id))

messages.map { message =>
val preparedMessage = prepareTopic(message, tags.getOrElse(message.id, Seq.empty), minimizeCut = true, None,
user.orNull, textMap(message.id), None)
user.map(_.user).orNull, textMap(message.id), None)

val topicMenu = getTopicMenu(preparedMessage, user.orNull, profile, loadUserpics)
val topicMenu = getTopicMenu(preparedMessage, user, profile, loadUserpics)
new PersonalizedPreparedTopic(preparedMessage, topicMenu)
}.asJava
}
Expand All @@ -192,22 +193,20 @@ class TopicPrepareService(sectionService: SectionService, groupDao: GroupDao, de
}.toSeq
}

def getTopicMenu(topic: PreparedTopic, @Nullable currentUser: User, profile: Profile,
def getTopicMenu(topic: PreparedTopic, currentUserOpt: Option[CurrentUser], profile: Profile,
loadUserpics: Boolean): TopicMenu = {
val topicEditable = groupPermissionService.isEditable(topic, currentUser)
val tagsEditable = groupPermissionService.isTagsEditable(topic, currentUser)
val topicEditable = groupPermissionService.isEditable(topic, currentUserOpt.map(_.user).orNull)
val tagsEditable = groupPermissionService.isTagsEditable(topic, currentUserOpt.map(_.user))

val (resolvable, deletable, undeletable) = if (currentUser != null) {
val resolvable = (currentUser.isModerator || (topic.author.getId == currentUser.getId)) &&
val (resolvable, deletable, undeletable) = currentUserOpt.map { currentUser =>
val resolvable = (currentUser.moderator || (topic.author.getId == currentUser.user.getId)) &&
topic.group.resolvable

val deletable = groupPermissionService.isDeletable(topic.message, currentUser)
val undeletable = groupPermissionService.isUndeletable(topic.message, currentUser)
val deletable = groupPermissionService.isDeletable(topic.message, currentUser.user)
val undeletable = groupPermissionService.isUndeletable(topic.message, currentUser.user)

(resolvable, deletable, undeletable)
} else {
(false, false, false)
}
}.getOrElse((false, false, false))

val userpic = if (loadUserpics && profile.isShowPhotos) {
Some(userService.getUserpic(topic.author, profile.getAvatarMode, misteryMan = true))
Expand All @@ -219,8 +218,8 @@ class TopicPrepareService(sectionService: SectionService, groupDao: GroupDao, de
val showComments = postscore != TopicPermissionService.POSTSCORE_HIDE_COMMENTS

TopicMenu(topicEditable, tagsEditable, resolvable,
topicPermissionService.isCommentsAllowed(topic.group, topic.message, Option(currentUser), ignoreFrozen = false), deletable,
undeletable, groupPermissionService.canCommit(currentUser, topic.message), userpic.orNull, showComments)
topicPermissionService.isCommentsAllowed(topic.group, topic.message, currentUserOpt.map(_.user), ignoreFrozen = false), deletable,
undeletable, groupPermissionService.canCommit(currentUserOpt.map(_.user), topic.message), userpic.orNull, showComments)
}

def prepareBrief(topic: Topic, groupInTitle: Boolean): BriefTopicRef = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 1998-2023 Linux.org.ru
* Copyright 1998-2024 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
Expand Down Expand Up @@ -69,7 +69,7 @@ class UncommitedTopicsController(sectionService: SectionService, topicListServic

val tmpl = Template.getTemplate

val topics = prepareService.prepareTopicsForUser(messages, currentUserOpt.map(_.user), tmpl.getProf, loadUserpics = false)
val topics = prepareService.prepareTopicsForUser(messages, currentUserOpt, tmpl.getProf, loadUserpics = false)

modelAndView.addObject("messages", topics)

Expand Down
14 changes: 7 additions & 7 deletions src/main/scala/ru/org/linux/topic/UserTopicListController.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 1998-2023 Linux.org.ru
* Copyright 1998-2024 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
Expand All @@ -20,7 +20,7 @@ import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.*
import org.springframework.web.servlet.ModelAndView
import org.springframework.web.util.UriComponentsBuilder
import ru.org.linux.auth.AccessViolationException
import ru.org.linux.auth.{AccessViolationException, CurrentUser}
import ru.org.linux.auth.AuthUtil.{AuthorizedOnly, AuthorizedOpt}
import ru.org.linux.section.{SectionNotFoundException, SectionService}
import ru.org.linux.site.Template
Expand Down Expand Up @@ -49,7 +49,7 @@ class UserTopicListController(topicListService: TopicListService, userDao: UserD
val offset = TopicListService.fixOffset(rawOffset)
modelAndView.addObject("offset", offset)
val messages = topicListService.getUserTopicsFeed(user, offset, isFavorite = true, watches = false)
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, currentUser.map(_.user))
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, currentUser)
modelAndView.setViewName("user-topics")

modelAndView
Expand All @@ -74,7 +74,7 @@ class UserTopicListController(topicListService: TopicListService, userDao: UserD
val offset = TopicListService.fixOffset(rawOffset)
modelAndView.addObject("offset", offset)
val messages = topicListService.getDrafts(user, offset)
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, Some(currentUser.user))
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, Some(currentUser))
modelAndView.setViewName("user-topics")

modelAndView
Expand Down Expand Up @@ -129,7 +129,7 @@ class UserTopicListController(topicListService: TopicListService, userDao: UserD

modelAndView.addObject("params", section.map(s => s"section=${s.getId}").getOrElse(""))

prepareTopicsForPlainOrRss(modelAndView, rss, messages, currentUser.map(_.user))
prepareTopicsForPlainOrRss(modelAndView, rss, messages, currentUser)

if (!rss) {
modelAndView.setViewName("user-topics")
Expand Down Expand Up @@ -184,14 +184,14 @@ class UserTopicListController(topicListService: TopicListService, userDao: UserD
modelAndView.addObject("offset", offset)

val messages = topicListService.getUserTopicsFeed(user, offset, isFavorite = true, watches = true)
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, Some(currentUser.user))
prepareTopicsForPlainOrRss(modelAndView, rss = false, messages, Some(currentUser))
modelAndView.setViewName("user-topics")

modelAndView
}

private def prepareTopicsForPlainOrRss(modelAndView: ModelAndView, rss: Boolean, messages: collection.Seq[Topic],
currentUser: Option[User]): Unit = {
currentUser: Option[CurrentUser]): Unit = {
if (rss) {
modelAndView.addObject("messages", prepareService.prepareTopics(messages).asJava)
modelAndView.setViewName("section-rss")
Expand Down

0 comments on commit 211183b

Please sign in to comment.