Index: src/main/java/it/finki/charitable/controller/DonationPostController.java
===================================================================
--- src/main/java/it/finki/charitable/controller/DonationPostController.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/controller/DonationPostController.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -2,10 +2,6 @@
 
 import it.finki.charitable.entities.*;
-import it.finki.charitable.services.DonationInformationService;
-import it.finki.charitable.services.DonationPostService;
-import it.finki.charitable.services.FundsCollectedService;
-import it.finki.charitable.services.UserService;
+import it.finki.charitable.services.*;
 import it.finki.charitable.util.FileUploadUtil;
-import org.springframework.data.domain.Page;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -16,5 +12,4 @@
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
 import java.io.IOException;
 import java.time.LocalDate;
@@ -32,10 +27,14 @@
     private final FundsCollectedService fundsCollectedService;
     private final DonationInformationService donationInformationService;
-
-    public DonationPostController(DonationPostService donationPostService, UserService userService, FundsCollectedService fundsCollectedService, DonationInformationService donationInformationService) {
+    private final ReportPostService reportPostService;
+    private final ReasonService reasonService;
+
+    public DonationPostController(DonationPostService donationPostService, UserService userService, FundsCollectedService fundsCollectedService, DonationInformationService donationInformationService, ReportPostService reportPostService, ReasonService reasonService) {
         this.donationPostService = donationPostService;
         this.userService = userService;
         this.fundsCollectedService = fundsCollectedService;
         this.donationInformationService = donationInformationService;
+        this.reportPostService = reportPostService;
+        this.reasonService = reasonService;
     }
 
@@ -140,27 +139,22 @@
             return "post";
         }
-        AppUser user = post.getUser();
-        model.addAttribute("post", post);
-        model.addAttribute("createdByFirstName", user.getFirstName());
-        model.addAttribute("createdByLastName", user.getLastName());
-        double total = post.getFundsCollected().stream().mapToDouble(FundsCollected::getFunds).sum();
-        model.addAttribute("total", total);
+
+        if (post.getApproved() || (post.getUser().getUsername().equals(SecurityContextHolder.getContext().getAuthentication().getName()) && !post.getApproved())) {
+            AppUser user = post.getUser();
+            Moderator moderator = post.getModerator();
+            model.addAttribute("post", post);
+            model.addAttribute("createdByFirstName", user.getFirstName());
+            model.addAttribute("createdByLastName", user.getLastName());
+            if (moderator != null) {
+                model.addAttribute("moderatorFirstName", moderator.getFirstName());
+                model.addAttribute("moderatorLastName", moderator.getLastName());
+            }
+            double total = post.getFundsCollected().stream().mapToDouble(FundsCollected::getFunds).sum();
+            model.addAttribute("total", total);
+        } else {
+            model.addAttribute("notFound", true);
+        }
         return "post";
     }
-
-//    @RequestMapping("/deletePost")
-//    public String deletePost(@RequestParam Long postid) {
-//        DonationPost post = donationPostService.getById(postid);
-//        if (post.getUser().getUsername().equals(SecurityContextHolder.getContext().getAuthentication().getName())) {
-//            List<String> fileForDeletion = post.getPhotosForDeletion();
-//            for (String f : fileForDeletion) {
-//                File file = new File(f);
-//                file.delete();
-//            }
-//            donationPostService.delete(post);
-//        }
-//
-//        return "redirect:/myPosts";
-//    }
 
     @RequestMapping("/donate")
@@ -188,4 +182,25 @@
     }
 
+    @RequestMapping("/report")
+    public String report(@RequestParam Long postid,
+                         @RequestParam String description) {
+
+        DonationPost donationPost = donationPostService.getById(postid);
+        ReportPost reportPost = reportPostService.findByDonationPost(donationPost);
+        if(reportPost == null) {
+            reportPost = new ReportPost();
+            reportPost.setDonationPost(donationPost);
+        }
+
+        Reason reason = new Reason();
+        AppUser user = (AppUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        reason.setUser(user);
+        reason.setDescription(description);
+        reasonService.save(reason);
+        reportPost.getReasons().add(reason);
+        reportPostService.save(reportPost);
+        return String.format("redirect:/post?postid=%d", postid);
+    }
+
     @ModelAttribute("user")
     public AppUser addAttributes() {
Index: src/main/java/it/finki/charitable/controller/ModeratorController.java
===================================================================
--- src/main/java/it/finki/charitable/controller/ModeratorController.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/controller/ModeratorController.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -1,8 +1,9 @@
 package it.finki.charitable.controller;
 
-import it.finki.charitable.entities.AppUser;
-import it.finki.charitable.entities.DonationPost;
+import it.finki.charitable.entities.*;
 import it.finki.charitable.services.DonationPostService;
 import it.finki.charitable.services.EmailService;
+import it.finki.charitable.services.ReasonService;
+import it.finki.charitable.services.ReportPostService;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Controller;
@@ -13,4 +14,5 @@
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
@@ -20,8 +22,12 @@
     private final DonationPostService donationPostService;
     private final EmailService emailService;
+    private final ReportPostService reportPostService;
+    private final ReasonService reasonService;
 
-    public ModeratorController(DonationPostService donationPostService, EmailService emailService) {
+    public ModeratorController(DonationPostService donationPostService, EmailService emailService, ReportPostService reportPostService, ReasonService reasonService) {
         this.donationPostService = donationPostService;
         this.emailService = emailService;
+        this.reportPostService = reportPostService;
+        this.reasonService = reasonService;
     }
 
@@ -48,4 +54,7 @@
         model.addAttribute("createdByFirstName", user.getFirstName());
         model.addAttribute("createdByLastName", user.getLastName());
+        if (post.getApproved()) {
+            model.addAttribute("approved", true);
+        }
         return "moderatorPost";
     }
@@ -55,6 +64,7 @@
         DonationPost post = donationPostService.getById(postid);
         post.setApproved(true);
+        post.setModerator((Moderator) SecurityContextHolder.getContext().getAuthentication().getPrincipal());
         donationPostService.save(post);
-        emailService.sendApprovalEmail(post.getUser().getEmail(),"CharitAbleMk: " + post.getTitle() + " has been approved", postid);
+        emailService.sendApprovalEmail(post.getUser().getEmail(), "CharitAbleMk: " + post.getTitle() + " has been approved", postid);
         return "redirect:/moderator/approval";
     }
@@ -65,11 +75,84 @@
         DonationPost post = donationPostService.getById(postid);
         emailService.sendNoApprovalEmail(post.getUser().getEmail(), "CharitAbleMk: " + post.getTitle() + " has not been approved", description);
-        List<String> fileForDeletion = post.getPhotosForDeletion();
+        deleteDonationPost(post);
+        return "redirect:/moderator/approval";
+    }
+
+    @RequestMapping("/moderator/myApprovedPosts")
+    public String myApprovedPosts(Model model) {
+        Moderator moderator = (Moderator) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        List<DonationPost> postList = donationPostService.findAllByModerator(moderator);
+        if (postList.size() == 0) {
+            model.addAttribute("noPosts", true);
+            return "postApproval";
+        }
+        model.addAttribute("postList", postList);
+        return "postApproval";
+    }
+
+    @RequestMapping("/moderator/report")
+    public String reportedPosts(Model model) {
+        List<ReportPost> postList = reportPostService.findAll();
+        if (postList.size() == 0) {
+            model.addAttribute("noPosts", true);
+            return "reportedPosts";
+        }
+        model.addAttribute("postList", postList);
+        return "reportedPosts";
+    }
+
+    @RequestMapping("/moderator/reportPost")
+    public String report(@RequestParam Long postid, Model model) {
+        ReportPost post = reportPostService.findById(postid);
+        model.addAttribute("post", post);
+        DonationPost donationPost = post.getDonationPost();
+        AppUser user = donationPost.getUser();
+        model.addAttribute("createdByFirstName", user.getFirstName());
+        model.addAttribute("createdByLastName", user.getLastName());
+        model.addAttribute("report", true);
+        Moderator moderator = post.getDonationPost().getModerator();
+        model.addAttribute("moderatorFirstName", moderator.getFirstName());
+        model.addAttribute("moderatorLastName", moderator.getLastName());
+
+        return "reportPost";
+    }
+
+    @RequestMapping("/moderator/dismiss")
+    public String dismiss(@RequestParam Long postid) {
+        ReportPost post = reportPostService.findById(postid);
+        deleteReportPost(post);
+        return "redirect:/moderator/reportedPosts";
+    }
+
+    @RequestMapping("/moderator/deletePost")
+    public String deletePost(@RequestParam Long postid,
+                             @RequestParam String description) {
+        ReportPost post = reportPostService.findById(postid);
+        DonationPost donationPost = post.getDonationPost();
+        emailService.sendDeletionEmail(donationPost.getUser().getEmail(), "CharitAbleMk: " + donationPost.getTitle() + " has been deleted", description);
+        deleteReportPost(post);
+        deleteDonationPost(donationPost);
+        return "redirect:/moderator/approval";
+    }
+
+    public void deleteDonationPost(DonationPost donationPost) {
+        List<String> fileForDeletion = donationPost.getPhotosForDeletion();
         for (String f : fileForDeletion) {
             File file = new File(f);
             file.delete();
         }
-        donationPostService.delete(post);
-        return "redirect:/moderator/approval";
+        donationPostService.delete(donationPost);
+    }
+
+    public void deleteReportPost(ReportPost reportPost) {
+        List<Reason> reasons = new ArrayList<>(reportPost.getReasons());
+        if (reportPost.getReasons().size() > 0) {
+            reportPost.getReasons().subList(0, reportPost.getReasons().size()).clear();
+        }
+        reportPostService.save(reportPost);
+        for(Reason r: reasons) {
+            reasonService.delete(r);
+        }
+        reportPostService.delete(reportPost);
     }
 
Index: src/main/java/it/finki/charitable/entities/DonationPost.java
===================================================================
--- src/main/java/it/finki/charitable/entities/DonationPost.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/entities/DonationPost.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -55,4 +55,7 @@
     private AppUser user;
 
+    @ManyToOne
+    private Moderator moderator;
+
     @OneToMany
     private List<FundsCollected> fundsCollected = new ArrayList<>();
@@ -204,4 +207,12 @@
     }
 
+    public Moderator getModerator() {
+        return moderator;
+    }
+
+    public void setModerator(Moderator moderator) {
+        this.moderator = moderator;
+    }
+
     public List<FundsCollected> getFundsCollected() {
         return fundsCollected;
Index: src/main/java/it/finki/charitable/entities/Reason.java
===================================================================
--- src/main/java/it/finki/charitable/entities/Reason.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/entities/Reason.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,53 @@
+package it.finki.charitable.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "reason")
+public class Reason {
+
+    @SequenceGenerator(
+            name = "reason_sequence",
+            sequenceName = "reason_sequence",
+            allocationSize = 1
+    )
+    @GeneratedValue(
+            strategy = GenerationType.SEQUENCE,
+            generator = "reason_sequence"
+    )
+    @Id
+    @Column(
+            name = "id",
+            nullable = false,
+            updatable = false
+    )
+    private Long id;
+
+    private String description;
+    @OneToOne
+    private AppUser user;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public AppUser getUser() {
+        return user;
+    }
+
+    public void setUser(AppUser user) {
+        this.user = user;
+    }
+}
Index: src/main/java/it/finki/charitable/entities/ReportPost.java
===================================================================
--- src/main/java/it/finki/charitable/entities/ReportPost.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/entities/ReportPost.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,57 @@
+package it.finki.charitable.entities;
+
+import javax.persistence.*;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "report_post")
+public class ReportPost {
+
+    @SequenceGenerator(
+            name = "report_post_sequence",
+            sequenceName = "report_post_sequence",
+            allocationSize = 1
+    )
+    @GeneratedValue(
+            strategy = GenerationType.SEQUENCE,
+            generator = "report_post_sequence"
+    )
+    @Id
+    @Column(
+            name = "id",
+            nullable = false,
+            updatable = false
+    )
+    private Long id;
+
+    @OneToOne
+    private DonationPost donationPost;
+
+    @OneToMany
+    private List<Reason> reasons = new ArrayList<>();
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public DonationPost getDonationPost() {
+        return donationPost;
+    }
+
+    public void setDonationPost(DonationPost donationPost) {
+        this.donationPost = donationPost;
+    }
+
+    public List<Reason> getReasons() {
+        return reasons;
+    }
+
+    public void setReasons(List<Reason> reasons) {
+        this.reasons = reasons;
+    }
+}
Index: src/main/java/it/finki/charitable/repository/DonationPostRepository.java
===================================================================
--- src/main/java/it/finki/charitable/repository/DonationPostRepository.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/repository/DonationPostRepository.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -3,4 +3,5 @@
 import it.finki.charitable.entities.AppUser;
 import it.finki.charitable.entities.DonationPost;
+import it.finki.charitable.entities.Moderator;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -12,3 +13,4 @@
     List<DonationPost> findAllByUser(AppUser user);
     List<DonationPost> findAllByApproved(Boolean approved);
+    List<DonationPost> findAllByModerator(Moderator moderator);
 }
Index: src/main/java/it/finki/charitable/repository/ReasonRepository.java
===================================================================
--- src/main/java/it/finki/charitable/repository/ReasonRepository.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/repository/ReasonRepository.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,9 @@
+package it.finki.charitable.repository;
+
+import it.finki.charitable.entities.Reason;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ReasonRepository extends JpaRepository<Reason, Long> {
+}
Index: src/main/java/it/finki/charitable/repository/ReportPostRepository.java
===================================================================
--- src/main/java/it/finki/charitable/repository/ReportPostRepository.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/repository/ReportPostRepository.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,12 @@
+package it.finki.charitable.repository;
+
+import it.finki.charitable.entities.DonationPost;
+import it.finki.charitable.entities.ReportPost;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ReportPostRepository extends JpaRepository<ReportPost, Long> {
+
+    ReportPost findByDonationPost(DonationPost post);
+}
Index: src/main/java/it/finki/charitable/services/DonationPostService.java
===================================================================
--- src/main/java/it/finki/charitable/services/DonationPostService.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/services/DonationPostService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -3,4 +3,5 @@
 import it.finki.charitable.entities.AppUser;
 import it.finki.charitable.entities.DonationPost;
+import it.finki.charitable.entities.Moderator;
 import it.finki.charitable.repository.DonationPostRepository;
 import org.springframework.data.domain.Page;
@@ -45,4 +46,8 @@
     }
 
+    public List<DonationPost> findAllByModerator(Moderator moderator) {
+        return donationPostRepository.findAllByModerator(moderator);
+    }
+
     public void delete(DonationPost donationPost) {
         donationPostRepository.delete(donationPost);
Index: src/main/java/it/finki/charitable/services/EmailService.java
===================================================================
--- src/main/java/it/finki/charitable/services/EmailService.java	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/java/it/finki/charitable/services/EmailService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -40,5 +40,16 @@
         message.setSubject(subject);
 
-        String text = "Sorry, your post hasn't been approved" + "\n" +
+        String text = "Sorry, your post hasn't been approved\n" +
+                "Moderator:\n" + description;
+        message.setText(text);
+        javaMailSender.send(message);
+    }
+
+    public void sendDeletionEmail(String to, String subject, String description) {
+        SimpleMailMessage message = new SimpleMailMessage();
+        message.setTo(to);
+        message.setSubject(subject);
+
+        String text = "Sorry, your post has been deleted\n" +
                 "Moderator:\n" + description;
         message.setText(text);
Index: src/main/java/it/finki/charitable/services/ReasonService.java
===================================================================
--- src/main/java/it/finki/charitable/services/ReasonService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/services/ReasonService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,23 @@
+package it.finki.charitable.services;
+
+import it.finki.charitable.entities.Reason;
+import it.finki.charitable.repository.ReasonRepository;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ReasonService {
+
+    private final ReasonRepository reasonRepository;
+
+    public ReasonService(ReasonRepository reasonRepository) {
+        this.reasonRepository = reasonRepository;
+    }
+
+    public void save(Reason reason) {
+        reasonRepository.save(reason);
+    }
+
+    public void delete(Reason reason) {
+        reasonRepository.delete(reason);
+    }
+}
Index: src/main/java/it/finki/charitable/services/ReportPostService.java
===================================================================
--- src/main/java/it/finki/charitable/services/ReportPostService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/java/it/finki/charitable/services/ReportPostService.java	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,39 @@
+package it.finki.charitable.services;
+
+import it.finki.charitable.entities.DonationPost;
+import it.finki.charitable.entities.Reason;
+import it.finki.charitable.entities.ReportPost;
+import it.finki.charitable.repository.ReportPostRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ReportPostService {
+
+    private final ReportPostRepository reportPostRepository;
+
+    public ReportPostService(ReportPostRepository reportPostRepository) {
+        this.reportPostRepository = reportPostRepository;
+    }
+
+    public List<ReportPost> findAll() {
+        return reportPostRepository.findAll();
+    }
+
+    public ReportPost findById(Long id) {
+        return reportPostRepository.getById(id);
+    }
+
+    public ReportPost findByDonationPost(DonationPost post) {
+        return reportPostRepository.findByDonationPost(post);
+    }
+
+    public void save(ReportPost post) {
+        reportPostRepository.save(post);
+    }
+
+    public void delete(ReportPost reportPost) {
+        reportPostRepository.delete(reportPost);
+    }
+}
Index: src/main/resources/templates/common/navbar.html
===================================================================
--- src/main/resources/templates/common/navbar.html	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/resources/templates/common/navbar.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -38,5 +38,6 @@
                     <a sec:authorize="isAnonymous()" type="button" class="btn btn-outline-light me-2" th:href="@{/login}">Login</a>
                     <a sec:authorize="isAnonymous()" type="button" class="btn btn-warning" th:href="@{/register}">Sign-up</a>
-                    <a sec:authorize="isAuthenticated()" type="button" class="btn btn-outline-light me-2" th:href="@{/userInformation}">My profile - <span th:text="${user.firstName}"></span></a>
+                    <a sec:authorize="isAuthenticated() and hasAuthority('USER')" type="button" class="btn btn-outline-light me-2" th:href="@{/userInformation}">My profile - <span th:text="${user.firstName}"></span></a>
+                    <a sec:authorize="isAuthenticated() and hasAuthority('MODERATOR')" type="button" class="btn btn-outline-light me-2" th:href="@{/moderator/myApprovedPosts}">My approved posts - <span th:text="${user.firstName} + ${user.lastName}"></span></a>
                     <a sec:authorize="isAuthenticated()" type="button" class="btn btn-warning" th:href="@{/logout}">Logout</a>
                 </div>
Index: src/main/resources/templates/moderatorPost.html
===================================================================
--- src/main/resources/templates/moderatorPost.html	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/resources/templates/moderatorPost.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -24,18 +24,23 @@
                 <div id="myCarousel" class="carousel carousel-dark slide card" data-bs-ride="carousel">
                     <div class="carousel-indicators">
-                        <button th:each="image, itrStat : ${post.moderatorPath}" type="button" data-bs-target="#myCarousel"
-                                th:data-bs-slide-to="${itrStat.index}" th:classappend="${itrStat.index} == 0 ? active"></button>
+                        <button th:each="image, itrStat : ${post.moderatorPath}" type="button"
+                                data-bs-target="#myCarousel"
+                                th:data-bs-slide-to="${itrStat.index}"
+                                th:classappend="${itrStat.index} == 0 ? active"></button>
                     </div>
                     <div class="carousel-inner">
-                        <div th:each="image, itrStat : ${post.moderatorPath}" th:classappend="${itrStat.index} == 0 ? active"
+                        <div th:each="image, itrStat : ${post.moderatorPath}"
+                             th:classappend="${itrStat.index} == 0 ? active"
                              class="carousel-item">
                             <img class="card-img" th:src="${image}" style="object-fit: contain">
                         </div>
                     </div>
-                    <button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
+                    <button class="carousel-control-prev" type="button" data-bs-target="#myCarousel"
+                            data-bs-slide="prev">
                         <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                         <span class="visually-hidden">Previous</span>
                     </button>
-                    <button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
+                    <button class="carousel-control-next" type="button" data-bs-target="#myCarousel"
+                            data-bs-slide="next">
                         <span class="carousel-control-next-icon" aria-hidden="true"></span>
                         <span class="visually-hidden">Next</span>
@@ -50,5 +55,6 @@
                 <p th:text="${post.description}"></p>
                 <h5>Funds needed:</h5>
-                <p><span th:text="${total}"></span>/<span th:text="${post.fundsNeeded}"></span> - <span th:text="${post.currency}"></span></p>
+                <p><span th:text="${total}"></span>/<span th:text="${post.fundsNeeded}"></span> - <span
+                        th:text="${post.currency}"></span></p>
                 <h5>Date due:</h5>
                 <p th:text="${post.dateDue}"></p>
@@ -61,22 +67,29 @@
                 <p><span th:text="${createdByFirstName}"></span> <span th:text="${createdByLastName}"></span></p>
 
-                <a class="btn btn-success" th:href="@{/moderator/approvePost(postid=${post.id})}">Approve</a>
-                <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
-                    Dont Approve
-                </button>
+                <div th:unless="${approved}">
+                    <a class="btn btn-success" th:href="@{/moderator/approvePost(postid=${post.id})}">Approve</a>
+                    <button type="button" class="btn btn-danger" data-bs-toggle="modal"
+                            data-bs-target="#staticBackdrop">
+                        Dont Approve
+                    </button>
+                </div>
 
                 <!-- Modal -->
-                <div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
+                <div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false"
+                     tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
                     <div class="modal-dialog modal-dialog-centered">
                         <div class="modal-content">
                             <div class="modal-header">
-                                <h5 class="modal-title" id="staticBackdropLabel">Donate</h5>
-                                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                                <h5 class="modal-title" id="staticBackdropLabel">Dont approve</h5>
+                                <button type="button" class="btn-close" data-bs-dismiss="modal"
+                                        aria-label="Close"></button>
                             </div>
                             <div class="modal-body">
                                 <div class="card-body">
-                                    <form th:action="@{/moderator/dontApprove(postid=${post.id})}" method="post" id="myForm">
+                                    <form th:action="@{/moderator/dontApprove(postid=${post.id})}" method="post"
+                                          id="myForm">
                                         <label for="description">Description</label>
-                                        <textarea class="form-control" id="description" name="description" rows="5"></textarea>
+                                        <textarea class="form-control" id="description" name="description"
+                                                  rows="5"></textarea>
                                     </form>
                                 </div>
Index: src/main/resources/templates/myProfile.html
===================================================================
--- src/main/resources/templates/myProfile.html	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/resources/templates/myProfile.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -245,6 +245,4 @@
                                                 Add collected funds
                                             </button>
-                                            <a class="btn btn-sm btn-danger"
-                                               th:href="@{/deletePost(postid=${post.id})}">Delete</a>
                                         </div>
                                     </div>
Index: src/main/resources/templates/post.html
===================================================================
--- src/main/resources/templates/post.html	(revision 5306751d2d24af6bfb27078e1727d579fa8b5939)
+++ src/main/resources/templates/post.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -60,7 +60,17 @@
             <h5>Created by:</h5>
             <p><span th:text="${createdByFirstName}"></span> <span th:text="${createdByLastName}"></span></p>
-
-            <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
+            <h5>Approved by:</h5>
+            <p th:unless="${moderatorFirstName}">Not approved</p>
+            <p><span th:text="${moderatorFirstName}"></span> <span th:text="${moderatorLastName}"></span></p>
+
+            <button sec:authorize="isAuthenticated()" type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
                 Donate
+            </button>
+            <a sec:authorize="isAnonymous()" type="button" class="btn btn-primary" th:href="@{/login}">
+                Donate
+            </a>
+            <button type="button" class="btn btn-danger" data-bs-toggle="modal"
+                    data-bs-target="#staticBackdrop1">
+                Report
             </button>
 
@@ -126,4 +136,30 @@
                 </div>
             </div>
+            <div class="modal fade" id="staticBackdrop1" data-bs-backdrop="static" data-bs-keyboard="false"
+                 tabindex="-1" aria-labelledby="staticBackdropLabel1" aria-hidden="true">
+                <div class="modal-dialog modal-dialog-centered">
+                    <div class="modal-content">
+                        <div class="modal-header">
+                            <h5 class="modal-title" id="staticBackdropLabel1">Report post</h5>
+                            <button type="button" class="btn-close" data-bs-dismiss="modal"
+                                    aria-label="Close"></button>
+                        </div>
+                        <div class="modal-body">
+                            <div class="card-body">
+                                <form th:action="@{/report(postid=${post.id})}" method="post"
+                                      id="myForm1">
+                                    <label for="description">Description</label>
+                                    <textarea class="form-control" id="description" name="description"
+                                              rows="5"></textarea>
+                                </form>
+                            </div>
+                        </div>
+                        <div class="modal-footer">
+                            <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+                            <input type="submit" class="btn btn-primary" form="myForm1" value="Confirm">
+                        </div>
+                    </div>
+                </div>
+            </div>
         </div>
     </div>
Index: src/main/resources/templates/reportPost.html
===================================================================
--- src/main/resources/templates/reportPost.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/resources/templates/reportPost.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,138 @@
+<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml" xmlns:sec="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="UTF-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+    <title>Register</title>
+    <!-- Bootstrap core CSS -->
+    <link href="/css/bootstrap.min.css" rel="stylesheet"/>
+    <link href="/css/carousel.css" rel="stylesheet"/>
+    <meta name="theme-color" content="#7952b3"/>
+</head>
+<body>
+<header th:replace="common/navbar :: navbar"></header>
+<br/>
+<br/>
+<br/>
+<div th:if="${notFound}">
+    Post not found
+</div>
+<div th:unless="${notFound}">
+    <div class="row">
+        <div class="col-md-6" style="margin-left: 5px">
+            <div class="col-md-12">
+
+                <div id="myCarousel" class="carousel carousel-dark slide card" data-bs-ride="carousel">
+                    <div class="carousel-indicators">
+                        <button th:each="image, itrStat : ${post.donationPost.moderatorPath}" type="button"
+                                data-bs-target="#myCarousel"
+                                th:data-bs-slide-to="${itrStat.index}"
+                                th:classappend="${itrStat.index} == 0 ? active"></button>
+                    </div>
+                    <div class="carousel-inner">
+                        <div th:each="image, itrStat : ${post.donationPost.moderatorPath}"
+                             th:classappend="${itrStat.index} == 0 ? active"
+                             class="carousel-item">
+                            <img class="card-img" th:src="${image}" style="object-fit: contain">
+                        </div>
+                    </div>
+                    <button class="carousel-control-prev" type="button" data-bs-target="#myCarousel"
+                            data-bs-slide="prev">
+                        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+                        <span class="visually-hidden">Previous</span>
+                    </button>
+                    <button class="carousel-control-next" type="button" data-bs-target="#myCarousel"
+                            data-bs-slide="next">
+                        <span class="carousel-control-next-icon" aria-hidden="true"></span>
+                        <span class="visually-hidden">Next</span>
+                    </button>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-5" style="margin-left: 5px">
+            <div class="col-md-12">
+                <h1 th:text="${post.donationPost.title}"></h1>
+                <h5>Description:</h5>
+                <p th:text="${post.donationPost.description}"></p>
+                <h5>Funds needed:</h5>
+                <p><span th:text="${total}"></span>/<span th:text="${post.donationPost.fundsNeeded}"></span> - <span
+                        th:text="${post.donationPost.currency}"></span></p>
+                <h5>Date due:</h5>
+                <p th:text="${post.donationPost.dateDue}"></p>
+                <h5>Bank account:</h5>
+                <p th:text="${post.donationPost.bankAccount}"></p>
+                <h5>Phone numbers:</h5>
+                <p><span th:text="${post.donationPost.phoneNumbers[0]}"></span> - Telekom</p>
+                <p><span th:text="${post.donationPost.phoneNumbers[1]}"></span> - A1</p>
+                <h5>Created by:</h5>
+                <p><span th:text="${createdByFirstName}"></span> <span th:text="${createdByLastName}"></span></p>
+                <h5>Approved by:</h5>
+                <p th:unless="${moderatorFirstName}">Not approved</p>
+                <p><span th:text="${moderatorFirstName}"></span> <span th:text="${moderatorLastName}"></span></p>
+
+                <div th:if="${report}">
+                    <a class="btn btn-success" th:href="@{/moderator/dismiss(postid=${post.id})}">Dismiss</a>
+                    <button type="button" class="btn btn-danger" data-bs-toggle="modal"
+                            data-bs-target="#staticBackdrop">
+                        Delete
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false"
+         tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
+        <div class="modal-dialog modal-dialog-centered">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title" id="staticBackdropLabel">Delete post</h5>
+                    <button type="button" class="btn-close" data-bs-dismiss="modal"
+                            aria-label="Close"></button>
+                </div>
+                <div class="modal-body">
+                    <div class="card-body">
+                        <form th:action="@{/moderator/deletePost(postid=${post.id})}" method="post"
+                              id="myForm">
+                            <label for="description">Description</label>
+                            <textarea class="form-control" id="description" name="description"
+                                      rows="5"></textarea>
+                        </form>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+                    <input type="submit" class="btn btn-primary" form="myForm" value="Confirm">
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="row" th:if="${report}">
+    <div class="col-md-12">
+        <div class="col-md-8">
+            <h3>Reports</h3>
+            <div class="card mb-3">
+                <div class="card-body">
+                    <div class="row">
+                        <div class="col">
+                            <h6>Description</h6>
+                        </div>
+                        <div class="col text-secondary">
+                            <h6>User</h6>
+                        </div>
+                    </div>
+                    <div class="row" th:each="reason : ${post.reasons}">
+                        <div class="col">
+                            <h6 th:text="${reason.description}"></h6>
+                        </div>
+                        <div class="col text-secondary" th:text="${reason.user.firstName} + ' ' + ${reason.user.lastName}">
+                        </div>
+                        <hr class="dropdown-divider">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="/js/bootstrap.min.js"></script>
+</body>
+</html>
Index: src/main/resources/templates/reportedPosts.html
===================================================================
--- src/main/resources/templates/reportedPosts.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
+++ src/main/resources/templates/reportedPosts.html	(revision ab4933857c0cfa01b78b275c9ecbb8ae480c8737)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="UTF-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+    <title>Album</title>
+    <!-- Bootstrap core CSS -->
+    <link href="/css/bootstrap.min.css" rel="stylesheet"/>
+</head>
+<body>
+<header th:replace="common/navbar :: navbar"></header>
+<hr class="dropdown-divider">
+<br/>
+<br/>
+<main>
+    <p th:if="${noPosts}">No posts</p>
+    <div th:unless="${noPosts}" class="album py-5 bg-light">
+        <div class="container">
+
+            <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
+                <div class="col" th:each="post : ${postList}">
+                    <div class="card shadow-sm">
+                        <img class="card-img" style="object-fit: contain" width="100%" height="225"
+                             th:src="${post.donationPost.imagesPath[0]}">
+                        <div class="card-body overflow-hidden">
+                            <h4 th:text="${post.donationPost.title}" style="height: 60px"></h4>
+                            <p class="card-text text-truncate" style="height: 45px" th:text="${post.donationPost.description}"></p>
+                            <div class="d-flex justify-content-between align-items-center">
+                                <div class="btn-group">
+                                    <a class="btn btn-sm btn-outline-secondary" th:href="@{/moderator/reportPost(postid=${post.id})}">Open</a>
+                                </div>
+                                <span class="text-muted">Date due: <small th:text="${post.donationPost.dateDue}"></small></span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <hr class="ui-menu-divider" />
+    </div>
+
+</main>
+<script src="/js/bootstrap.min.js"></script>
+</body>
+</html>
