/** * Copyright © ${project.inceptionYear} Instituto Superior Técnico * * This file is part of Fenix IST. * * Fenix IST is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fenix IST is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Fenix IST. If not, see <http://www.gnu.org/licenses/>. */ package pt.ist.fenix.ui.spring; import org.fenixedu.academic.domain.Person; import org.fenixedu.academic.domain.accessControl.AllAlumniGroup; import org.fenixedu.academic.domain.contacts.PartyContact; import org.fenixedu.academic.domain.contacts.PartyContactType; import org.fenixedu.academic.domain.contacts.WebAddress; import org.fenixedu.academic.predicate.AccessControl; import org.fenixedu.bennu.spring.portal.SpringApplication; import org.fenixedu.bennu.spring.portal.SpringFunctionality; import org.fenixedu.commons.i18n.LocalizedString; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.view.RedirectView; import pt.ist.fenix.domain.homepage.HomepageListener; import pt.ist.fenix.domain.homepage.HomepageSite; import javax.servlet.http.HttpServletRequest; import static java.util.Optional.ofNullable; import static java.util.stream.Collectors.toList; import static pt.ist.fenixframework.FenixFramework.atomic; @SpringApplication(group = "logged", path = "personal-homepage", title = "application.homepage.admin") @SpringFunctionality(app = HomepageAdminController.class, title = "application.homepage.admin") @RequestMapping("/personal-homepage") public class HomepageAdminController { @Autowired PagesAdminService service; @RequestMapping(method = RequestMethod.GET) public String options(Model model) { Person person = loggedPerson(); HomepageSite homepage = person.getHomepage(); model.addAttribute("homepage", homepage); model.addAttribute("person", person); if (homepage != null) { model.addAttribute("dynamicPages", service.dynamicPages(homepage).collect(toList())); model.addAttribute("isAlumi", new AllAlumniGroup().isMember(person.getUser())); } return "fenix-learning/homepageOptions"; } @RequestMapping(value = "/content", method = RequestMethod.GET) public String content(Model model) { model.addAttribute("homepage", loggedPerson().getHomepage()); return "fenix-learning/homepageContent"; } @RequestMapping(value = "/options", method = RequestMethod.POST) public RedirectView editHomepageOptions(@RequestParam(required = false, defaultValue = "false") Boolean showPhoto, @RequestParam(required = false, defaultValue = "false") Boolean showCategory, @RequestParam(required = false, defaultValue = "false") Boolean showResearchUnitHomepage, @RequestParam(required = false, defaultValue = "false") Boolean showActiveStudentCurricularPlans, @RequestParam(required = false, defaultValue = "false") Boolean published, @RequestParam(required = false) String researchUnitHomepage, @RequestParam(required = false) LocalizedString researchUnitName, @RequestParam(required = false, defaultValue = "false") Boolean showUnit, @RequestParam(required = false, defaultValue = "false") Boolean showCurrentExecutionCourses, @RequestParam( required = false, defaultValue = "false") Boolean showCurrentAttendingExecutionCourses, @RequestParam( required = false, defaultValue = "false") Boolean showAlumniDegrees) { atomic(() -> { if (loggedPerson().getHomepage() == null) { HomepageListener.create(loggedPerson()); } else { HomepageSite homepage = loggedPerson().getHomepage(); homepage.setShowPhoto(showPhoto); homepage.setShowCategory(showCategory); homepage.setShowResearchUnitHomepage(showResearchUnitHomepage); homepage.setShowActiveStudentCurricularPlans(showActiveStudentCurricularPlans); homepage.setResearchUnitHomepage(researchUnitHomepage); homepage.setResearchUnitName(researchUnitName); homepage.setPublished(published); String url = homepage.getFullUrl(); if (published) { boolean foundAddress = false; for (PartyContact contact : homepage.getOwner().getPartyContacts(WebAddress.class)) { WebAddress address = (WebAddress) contact; if (address.getUrl().equals(url)) { address.setDefaultContact(true); foundAddress = true; } else { address.setDefaultContact(false); } } if (!foundAddress) { WebAddress.createWebAddress(homepage.getOwner(), url, PartyContactType.INSTITUTIONAL, true); } else { WebAddress address = homepage.getOwner().getDefaultWebAddress(); if (address != null && address.getUrl().equals(homepage.getFullUrl())) { address.setDefaultContact(false); } } homepage.setShowUnit(showUnit); homepage.setShowCurrentExecutionCourses(showCurrentExecutionCourses); homepage.setShowCurrentAttendingExecutionCourses(showCurrentAttendingExecutionCourses); homepage.setShowAlumniDegrees(showAlumniDegrees); } } }); return new RedirectView("/personal-homepage", true); } @RequestMapping(value = "/activePages", method = RequestMethod.POST) public RedirectView editActivePages(HttpServletRequest request) { HomepageSite homepage = loggedPerson().getHomepage(); if (homepage != null) { atomic(() -> service.dynamicPages(homepage).forEach( page -> page.setPublished(request.getParameterMap().keySet().contains(page.getSlug())))); } return new RedirectView("/personal-homepage", true); } private Person loggedPerson() { AccessControl.check((obj) -> AccessControl.getPerson() != null); return AccessControl.getPerson(); } private HomepageSite getOrCreateHomepage() { return ofNullable(loggedPerson().getHomepage()).orElseGet(() -> HomepageListener.create(loggedPerson())); } }