Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1102 Make it possible to delete images within storybook chapters #1610

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ai.elimu.web.content.storybook.chapter;

import ai.elimu.model.contributor.Contributor;
import ai.elimu.model.enums.Role;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;

@Component
public class StoryBookChapterComponent {

private final Logger logger = LogManager.getLogger();

public void checkEditorRole(HttpSession session) {
Contributor contributor = (Contributor) session.getAttribute("contributor");
logger.info("contributor.getRoles(): " + contributor.getRoles());
if (!contributor.getRoles().contains(Role.EDITOR)) {
// TODO: return HttpStatus.FORBIDDEN
throw new IllegalAccessError("Missing role for access");
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ai.elimu.web.content.storybook.chapter;

import ai.elimu.dao.StoryBookChapterDao;
import ai.elimu.model.content.StoryBookChapter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/content/storybook/edit/{storyBookId}/chapter")
public class StoryBookChapterController {

private final Logger logger = LogManager.getLogger();

@Autowired
private StoryBookChapterDao storyBookChapterDao;

@Autowired
private StoryBookChapterComponent storyBookChapterComponent;

@RequestMapping(value = "/{storyBookChapterId}/deleteImage", method = RequestMethod.GET)
public String deleteImageFormStoryBookChapter(HttpSession session, @PathVariable Long storyBookId, @PathVariable Long storyBookChapterId) {
logger.info("deleteImageFormStoryBookChapter");
storyBookChapterComponent.checkEditorRole(session);

StoryBookChapter storyBookChapter = storyBookChapterDao.read(storyBookChapterId);
storyBookChapter.setImage(null);
storyBookChapterDao.update(storyBookChapter);

return "redirect:/content/storybook/edit/" + storyBookId;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,14 @@ public class StoryBookChapterDeleteController {
@Autowired
private StoryBooksJsonService storyBooksJsonService;

@Autowired
private StoryBookChapterComponent storyBookChapterComponent;

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String handleRequest(HttpSession session, @PathVariable Long storyBookId, @PathVariable Long id) {
logger.info("handleRequest");

Contributor contributor = (Contributor) session.getAttribute("contributor");
logger.info("contributor.getRoles(): " + contributor.getRoles());
if (!contributor.getRoles().contains(Role.EDITOR)) {
// TODO: return HttpStatus.FORBIDDEN
throw new IllegalAccessError("Missing role for access");
}

storyBookChapterComponent.checkEditorRole(session);

StoryBookChapter storyBookChapterToBeDeleted = storyBookChapterDao.read(id);
logger.info("storyBookChapterToBeDeleted: " + storyBookChapterToBeDeleted);
Expand Down Expand Up @@ -127,7 +125,7 @@ public String handleRequest(HttpSession session, @PathVariable Long storyBookId,

// Store contribution event
StoryBookContributionEvent storyBookContributionEvent = new StoryBookContributionEvent();
storyBookContributionEvent.setContributor(contributor);
storyBookContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
storyBookContributionEvent.setTime(Calendar.getInstance());
storyBookContributionEvent.setStoryBook(storyBook);
storyBookContributionEvent.setRevisionNumber(storyBook.getRevisionNumber());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import ai.elimu.model.content.StoryBook;
import ai.elimu.model.content.StoryBookParagraph;
import ai.elimu.model.content.multimedia.Audio;
import ai.elimu.web.content.storybook.chapter.StoryBookChapterComponent;
import org.apache.logging.log4j.Logger;
import ai.elimu.model.contributor.Contributor;
import ai.elimu.model.contributor.StoryBookContributionEvent;
import ai.elimu.model.enums.PeerReviewStatus;
import ai.elimu.model.enums.Platform;
import ai.elimu.model.enums.Role;
import ai.elimu.rest.v2.service.StoryBooksJsonService;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
Expand Down Expand Up @@ -47,16 +47,14 @@ public class StoryBookParagraphDeleteController {
@Autowired
private StoryBooksJsonService storyBooksJsonService;

@Autowired
private StoryBookChapterComponent storyBookChapterComponent;

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String handleRequest(HttpSession session, @PathVariable Long id) {
logger.info("handleRequest");

Contributor contributor = (Contributor) session.getAttribute("contributor");
logger.info("contributor.getRoles(): " + contributor.getRoles());
if (!contributor.getRoles().contains(Role.EDITOR)) {
// TODO: return HttpStatus.FORBIDDEN
throw new IllegalAccessError("Missing role for access");
}
storyBookChapterComponent.checkEditorRole(session);

StoryBookParagraph storyBookParagraphToBeDeleted = storyBookParagraphDao.read(id);
logger.info("storyBookParagraphToBeDeleted: " + storyBookParagraphToBeDeleted);
Expand Down Expand Up @@ -84,7 +82,7 @@ public String handleRequest(HttpSession session, @PathVariable Long id) {

// Store contribution event
StoryBookContributionEvent storyBookContributionEvent = new StoryBookContributionEvent();
storyBookContributionEvent.setContributor(contributor);
storyBookContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
storyBookContributionEvent.setTime(Calendar.getInstance());
storyBookContributionEvent.setStoryBook(storyBook);
storyBookContributionEvent.setRevisionNumber(storyBook.getRevisionNumber());
Expand Down
3 changes: 3 additions & 0 deletions src/main/webapp/WEB-INF/jsp/content/storybook/edit.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@
<a href="<spring:url value='/content/multimedia/image/edit/${storyBookChapter.image.id}' />">
<img src="<spring:url value='/image/${storyBookChapter.image.id}_r${storyBookChapter.image.revisionNumber}.${fn:toLowerCase(storyBookChapter.image.imageFormat)}' />" alt="${storyBook.title}" />
</a>
<sec:authorize access="hasRole('ROLE_EDITOR')">
<a href="<spring:url value='/content/storybook/edit/${storyBook.id}/chapter/${storyBookChapter.id}/deleteImage' />" class="waves-effect waves-red red-text btn-flat right"><fmt:message key="delete" /></a>
</sec:authorize>
</c:if>

<c:forEach var="storyBookParagraph" items="${paragraphsPerStoryBookChapterMap[storyBookChapter.id]}">
Expand Down